社区
进程/线程/DLL
帖子详情
主线程有什么好的延时方法?
一秒一次郎
2012-05-09 07:42:36
开多线程,用全局变量来记录线程数量,在主线程中用 while(true) 来判断,如果用sleep延时的话,有时候会出现未响应的情况,有没有更好一点的方法?
...全文
374
17
打赏
收藏
主线程有什么好的延时方法?
开多线程,用全局变量来记录线程数量,在主线程中用 while(true) 来判断,如果用sleep延时的话,有时候会出现未响应的情况,有没有更好一点的方法?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
打赏
举报
回复
为什么要在主线程当中??你这样做必然的啊
开个线程,然后通过这个线程替代你现在让主线程干的事
OC中创建
线程
的
方法
是什么?如果在
主
线程
中执行,
方法
是什么?如果想
延时
执行代码,
方法
是什么?
《1》
线程
创建有三种
方法
:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue; 《2》在
主
线程
执行代码,
方法
是performSelectorOnMainThread; 《3》如果想
延时
执行代码可以用performSelector:onThread:withObject:waitUntilDone:;
object-c中创建
线程
的
方法
有哪些?在
主
线程
中执行代码用什么
方法
?如果想要
延时
执行代码,用什么
方法
?
1.object-c中创建
线程
的
方法
:
Android
主
线程
中
延时
处理
Android对UI
主
线程
开启了实时监听,Activity Manager和WindowManager系统服务一旦监听到
主
线程
超过10秒没有响应操作,就会抛出ANR,所以,在UI
主
线程
中不能直接调用Thread.sleep
方法
去
延时
,超过10秒就根本不会执行后面的操作,当有必要在
主
线程
中增加
延时
处理时,可以通过开启子
线程
的
方法
:new Thread(new Runnable(){
QT编程之定时器或者程序中进行
延时
,不阻塞
主
线程
解决办法
QT
延时
阻塞解决办法1、阻塞
主
线程
2、不阻塞
主
线程
1、阻塞
主
线程
最简单的
延时
方法
就是使用QThread类的sleep(n)、msleep(n)、usleep(n) QThread::msleep(50);//阻塞
延时
50ms 2、不阻塞
主
线程
void Delay_MSec(unsigned int msec) //毫秒 { QTime _Timer = QTime::currentTime().addMSecs(msec); while( QTime::currentTime() &
Qt
延时
处理
方法
介绍
Qt
延时
操作需注意避免阻塞
主
线程
。推荐使用非阻塞
方法
如QTimer::singleShot实现异步
延时
,适用于GUI
线程
的定时任务;工作
线程
中可用QThread::msleep或C++标准库的sleep_for,但严禁在
主
线程
调用。高级场景可结合QtConcurrent实现后台
延时
。关键原则是确保
主
线程
不阻塞,长时间任务应分解或移至子
线程
处理,并通过信号槽机制更新进度。文中对比了各种
方法
的阻塞特性和适用场景,强调界面响应与
线程
安全的最佳实践。
进程/线程/DLL
15,465
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章