如果只是使用Sleep()函数计时,并不希望整个程序被挂起,要怎么做?
问题点数:20、回复次数:24Top
1 楼dalinsky(大林)回复于 2002-02-01 14:51:26 得分 0
Application->ProcessMessages();
或者,使用线程Top
2 楼redpower(常宁)回复于 2002-02-01 14:58:45 得分 0
用TTimer计时,精度一样Top
3 楼40Star(斯文、大方、有前途)回复于 2002-02-01 14:58:56 得分 0
位傻不用TimerTop
4 楼gfh21cn(葛凤华)回复于 2002-02-01 15:04:17 得分 0
用Sleep来计时是被挂起的意思,如果你不想
程序被挂起,你就不能用这个
Application->ProcessMessage()最常用的是
在循环的时候
你还是用Timer来计时吧
其实计时有很多种的
有的很精确
Top
5 楼gfh21cn(葛凤华)回复于 2002-02-01 15:06:16 得分 0
QueryPerformanceFreguency()
QueryPerformanceCounter()
可以实现精确计时
Top
6 楼gfh21cn(葛凤华)回复于 2002-02-01 15:12:43 得分 10
程序示例
LARGE_INTEGER litmp;
LONGLONG QPart1,QPart2;
double dfminus,dffreg,dftime;
QueryPerformanceFreguency(&litmp);
dffreg=(double)litmp.quadpart;
QueryPerformanceCounter(&litmp);
QPart1=litmp.quaclpart;
sleep(100);
QueryPerformanceCounter(&litmp);
QPart2=litmp.quaclpart;
dfminus=(double)(QPart2-QPart1);
Top
7 楼hjk_2(hjk)回复于 2002-02-01 15:23:24 得分 0
to : gfh21cn(gfh)
你的精确计时是不是也要挂起程序?
Top
8 楼hjk_2(hjk)回复于 2002-02-01 15:28:47 得分 0
Application->ProcessMessages()-------------这个语句是什么意思?
Top
9 楼redpower(常宁)回复于 2002-02-01 15:32:21 得分 0
让程序有时间处理消息,实际上就是调用消息循环 Application->ProcessMessages()
如果没有特殊要求,比如精度要求很高,就用TTimer最好Top
10 楼invalid(空心菜(Python是个好东东,大家多用用!))回复于 2002-02-01 17:58:24 得分 10
// Application->ProcessMessages();就是让Windows获得系统控制权
然后能够响应处理其它消息,避免死机(Windows不响应)情况的发生。
下面的代码就象是Sleep(30000)。
int BeginTimeMillis = GetTickCount();
while((GetTickCount()-BeginTimeMillis)<30000)
{
Application->ProcessMessages();
}
Top
11 楼hjk_2(hjk)回复于 2002-02-01 18:13:38 得分 0
谢谢,我测试一下
要是人不用睡觉就好了,硬盘里面10多G的动画片还没有时间看Top
12 楼hjk_2(hjk)回复于 2002-02-01 19:41:19 得分 0
那 Application->ProcessMessages(); 这段代码应放在哪呢?
像这样不行:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Sleep(5000);
Application->ProcessMessages();
}
Top
13 楼hjk_2(hjk)回复于 2002-02-01 19:51:59 得分 0
U PTop
14 楼jearry_zhou2(jearry)回复于 2002-02-01 19:52:29 得分 0
用delay();吧,不过要加#include stdlib.hTop
15 楼hjk_2(hjk)回复于 2002-02-01 20:41:26 得分 0
那 Application->ProcessMessages(); 这段代码应放在哪呢?
Top
16 楼hjk_2(hjk)回复于 2002-02-01 21:43:40 得分 0
如果不使用Application->ProcessMessages();
用多线程又是怎么实现的?Top
17 楼fenglingdu(风陵渡)回复于 2002-02-01 23:38:29 得分 0
关注...Top
18 楼lm09(江泽民他爹)回复于 2002-02-02 08:28:32 得分 0
不知道你想实现什么,但是听起来用多线程完全可以实现,搜索一下,有相关的贴子,要不你说一下你的具体想法
Top
19 楼Behard(我爱天安门)回复于 2002-02-02 09:00:23 得分 0
想不懂,你要干吗?Top
20 楼xinghf(xinghf)回复于 2002-02-02 10:11:01 得分 0
新建一个线程类Top
21 楼hjk_2(hjk)回复于 2002-02-02 12:29:37 得分 0
我试过新建一个线程类,线程就是用来计时的,但我的主进程还是被锁住了 Top
22 楼firestars(烦)回复于 2002-02-02 17:58:36 得分 0
创建了新的线程来记时??是不是用的timer控件?这样的话显然是不行的,Top
23 楼hjk_2(hjk)回复于 2002-02-02 18:17:39 得分 0
我是用
QueryPerformanceFreguency()
QueryPerformanceCounter()
Top
24 楼waq(我要它干什么?)回复于 2002-02-11 02:57:21 得分 0
要计时也不用多线程吧, 多媒体时钟精确到一ms!Top




