回 帖 发 新 帖 刷新版面

主题:一个经典的问题 : Sleep()

用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个回复)

沙发

Sleep()这个函数, 当然是要运行完才能继续下面的语句。 如果是单线程停在这里了, 不会再处理其它消息。

如果你要在Sleep的时候处理其他事情, 用多线程吧。 

另外, 这里不懂你为什么要Sleep, 要实现什么功能?

板凳

因为DriverLoad和DriverUnload两个函数要花一点时间,所以我在它们两个中间加了一上Sleep函数,好让函数运行起来有时缓冲时间。
    另外,我想做一个10左右的循环,每DriverLoad或DriverUnload后静态文本就会更新一次,可是用了Sleep后,静态文本一直不能更新。
    neverPE,你说用多线程,How? 请指教一下。谢谢了。

3 楼

CreateThread

4 楼

天哪,因為上一個函數執行慢,所以加一個Sleep()。
因為Sleep()執行很慢,要1秒鐘才執行完,那是不是在它後面也應譔加個 Sleep()來等它執行完啊??
。。。。。。

5 楼


晕,sleep的过程中是什么也不做的,休眠的意思,白等,
建议多线程

6 楼

CreateThread比较烦琐,一般_beginthread就可以了

7 楼

呵,那差个什么啊,

8 楼

Sleep就把所在进程或线程给挂起了,要实现所谓的缓冲,如其他人所说:用多线程,不过得用上《操作系统》里讲的“进程同步”、“进程异步”等的问题,加锁解锁之类

9 楼

经典的问题,~~期待答案

10 楼

fantasyemperor所说的多线程是不是指将Sleep()放到另外一下线程里去?

我来回复

您尚未登录,请登录后再回复。点此登录或注册