主线程有什么好的延时方法?

一秒一次郎 2012-05-09 07:42:36
开多线程,用全局变量来记录线程数量,在主线程中用 while(true) 来判断,如果用sleep延时的话,有时候会出现未响应的情况,有没有更好一点的方法?
...全文
311 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly4free 2012-05-10
  • 打赏
  • 举报
回复
不要在 CXXXDlg 的事件处理函数中 进行工作量大、占用时间长的任务。必然“未响应”。
可以放在其他线程里完成。
一秒一次郎 2012-05-10
  • 打赏
  • 举报
回复
谢谢各位,小弟又开了一个线程延时等待判断,就解决这个问题了,结贴
96掌门师兄 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
主线程一般不建议Sleep,主要会造成消息没能及时处理,导致界面无响应
[/Quote]

+++
向立天 2012-05-10
  • 打赏
  • 举报
回复
主线程就不应该延时
什么和延时有关的方法都不该用
sichuanwww 2012-05-10
  • 打赏
  • 举报
回复
尽量不要在主线程处理。

sichuanwww 2012-05-10
  • 打赏
  • 举报
回复
尽量不要在主线程处理,简单一点可以标记个信号量,当无信号时不处理,并设定个定时器重置信号量。

许文君 2012-05-10
  • 打赏
  • 举报
回复
尽量不要在主线程处理,简单一点可以标记个信号量,当无信号时不处理,并设定个定时器重置信号量。
一秒一次郎 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
用一个主线程就可以干好这些事情,但是需要统筹管理工作时间,请注意下面代码里的注释:

start:
while(PeekMessage(msg, NULL, 0, 0, PM_REMOVE)){ // 攫取出消息
if(msg->message == WM_QUIT) // 如果是quit消息,则结束操作
goto end;

DispatchMessage(msg)……
[/Quote]

谢谢分享,另求更多方法
「已注销」 2012-05-09
  • 打赏
  • 举报
回复
用一个主线程就可以干好这些事情,但是需要统筹管理工作时间,请注意下面代码里的注释:

start:
while(PeekMessage(msg, NULL, 0, 0, PM_REMOVE)){ // 攫取出消息
if(msg->message == WM_QUIT) // 如果是quit消息,则结束操作
goto end;

DispatchMessage(msg); // 分发攫取到的消息
}
// 如果程序运行到这里,说明消息队列里的消息都被分发,现在处于空闲(Idle)状态。
// 现在可以做你的工作,但是,不要长时间工作,必须将工作分成小片小片的,每次做一片。
do_your_job_piece();

// 下面要getmessage,阻塞等待消息,如果没有这个函数,CPU占用率会达到100%
if(!GetMessage(msg, NULL, 0, 0))
goto end;

DispatchMessage(msg); // 分发

goto start; // 重复这个过程

end: 结束

代码是我随手写的,存在问题,比如,处理键盘(浏览键)消息,但大致就是这个意思。
一秒一次郎 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
线程退出时候发消息给主线程,不需要主线程进行监视
[/Quote]

能给出稍微具体一点的步骤吗
一秒一次郎 2012-05-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
主线程一般不建议Sleep,主要会造成消息没能及时处理,导致界面无响应
[/Quote]

那有什么好方法呢?
cczlp 2012-05-09
  • 打赏
  • 举报
回复
线程退出时候发消息给主线程,不需要主线程进行监视
Eleven 2012-05-09
  • 打赏
  • 举报
回复
主线程一般不建议Sleep,主要会造成消息没能及时处理,导致界面无响应
小马喝水 2012-05-09
  • 打赏
  • 举报
回复
sleep会放出CPU,不会导致 占用大量CPU
不想用sleep的话,可以用WaitForSingleObject(event,100)来等待一个未激活的事件
一秒一次郎 2012-05-09
  • 打赏
  • 举报
回复
另外,现在网络盛传的sleep 占用大量CPU是否为真,小菜同问
一秒一次郎 2012-05-09
  • 打赏
  • 举报
回复
骚逮撕奶,另问还有别的方法吗?
superhanxin5 2012-05-09
  • 打赏
  • 举报
回复
为什么要在主线程当中??你这样做必然的啊
开个线程,然后通过这个线程替代你现在让主线程干的事

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧