主题:一个经典的问题 : Sleep()
运动好身材
[专家分:20] 发布于 2007-03-07 09:15:00
用Sleep()函数时,是不是程序不能进入消息循环了,也就是说窗口不能更新了?我有如下代码:
OnBnClickedButtonRun()
{
IfLoaded=DriverLoad();
if (IfLoaded==TRUE)
SetDlgItemText(IDC_STATIC_RESULT,TEXT("Driver Loaded"));
else
SetDlgItemText(IDC_STATIC_RESULT,TEXT("Driver Loaded NG"));
Sleep(1000);
IfLoaded=DriverUnload();
if (IfLoaded==TRUE)
SetDlgItemText(IDC_STATIC_RESULT,TEXT("Driver Unloaded"));
else
SetDlgItemText(IDC_STATIC_RESULT,TEXT("Driver Unloaded NG"));
}
可是在SLEEP过程中静态文本一直不能更新,一点按钮后就只显示最后的结果,我试过用Application->ProcessMessages(); 可是提示Application:undeclared identifier。哪位高手指一下,谢谢了。
回复列表 (共13个回复)
沙发
neverPE [专家分:1620] 发布于 2007-03-10 23:35:00
Sleep()这个函数, 当然是要运行完才能继续下面的语句。 如果是单线程停在这里了, 不会再处理其它消息。
如果你要在Sleep的时候处理其他事情, 用多线程吧。
另外, 这里不懂你为什么要Sleep, 要实现什么功能?
板凳
运动好身材 [专家分:20] 发布于 2007-03-12 08:55:00
因为DriverLoad和DriverUnload两个函数要花一点时间,所以我在它们两个中间加了一上Sleep函数,好让函数运行起来有时缓冲时间。
另外,我想做一个10左右的循环,每DriverLoad或DriverUnload后静态文本就会更新一次,可是用了Sleep后,静态文本一直不能更新。
neverPE,你说用多线程,How? 请指教一下。谢谢了。
3 楼
tanchuhan [专家分:15140] 发布于 2007-03-20 20:38:00
CreateThread
4 楼
cody_yan [专家分:0] 发布于 2007-04-04 16:19:00
天哪,因為上一個函數執行慢,所以加一個Sleep()。
因為Sleep()執行很慢,要1秒鐘才執行完,那是不是在它後面也應譔加個 Sleep()來等它執行完啊??
。。。。。。
5 楼
fantasyemperor [专家分:200] 发布于 2007-04-10 13:27:00
晕,sleep的过程中是什么也不做的,休眠的意思,白等,
建议多线程
6 楼
sasuke219 [专家分:30] 发布于 2007-04-17 11:00:00
CreateThread比较烦琐,一般_beginthread就可以了
7 楼
yjh4866 [专家分:100] 发布于 2007-05-03 17:02:00
呵,那差个什么啊,
8 楼
yjh4866 [专家分:100] 发布于 2007-05-03 17:05:00
Sleep就把所在进程或线程给挂起了,要实现所谓的缓冲,如其他人所说:用多线程,不过得用上《操作系统》里讲的“进程同步”、“进程异步”等的问题,加锁解锁之类
9 楼
skybtone [专家分:160] 发布于 2007-05-14 17:46:00
经典的问题,~~期待答案
10 楼
运动好身材 [专家分:20] 发布于 2007-05-15 09:00:00
fantasyemperor所说的多线程是不是指将Sleep()放到另外一下线程里去?
我来回复