社区
进程/线程/DLL
帖子详情
在工作者线程中非得加入sleep(1)(最后的140分了)
sundy
2000-03-06 08:49:00
我在一个对话框中开了五个工作者线程,如果不在每个线程中加入Sleep(1);就会停止响应,直到五个线程都终止了才行,加入Sleep(0);就会每个线程的进度不一样,这是为什么?
...全文
360
13
打赏
收藏
在工作者线程中非得加入sleep(1)(最后的140分了)
我在一个对话框中开了五个工作者线程,如果不在每个线程中加入Sleep(1);就会停止响应,直到五个线程都终止了才行,加入Sleep(0);就会每个线程的进度不一样,这是为什么?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gun2
2000-03-09
打赏
举报
回复
同意jamesw,fbq,forgettor等人的观点
fbq
2000-03-08
打赏
举报
回复
我也这样认为,用PostMessage()五个线程会一下发出很多消息,主线程来不及处理,但不会停止响应,只是很“忙”。
而SendMessage()线程要等待主线程的返回,消息发送速度比PostMessage()慢.
sundy
2000-03-08
打赏
举报
回复
十在对不起大家,上面的代码有误,PostMessage写成SendMessage了,我反复实验,结论如下:
用PostMessage()就一定要加Sleep(1);
用SendMessage()不加Sleep(1)也行。
我想了一下,可能是用PostMessage五个线程会一下发出很多消息,主线程来及处理,就停止响应了。
forgettor
2000-03-08
打赏
举报
回复
循环占用cpu过多,必需用sleep(1)释放,我猜你做的循环是用来延时的,那为什么不用消息或者wait类函数呢?
Lin
2000-03-07
打赏
举报
回复
同意wzq,SendMessage必须等待消息处理完才返回,建议换成PostMessage试试,另外,你的主线程在处理消息时要注意代码重入问题,尽量避免使用全局变量。
jamesw
2000-03-07
打赏
举报
回复
for (i=0;i<=3000;i++)
{
for (j=0;j<=2;j++)
{
Sleep(1)//不加就不行,不知为什么?
}
}
可能CPU占用率太高,
必须强迫释放
jamesw
2000-03-07
打赏
举报
回复
try
PostMessage()
wzq
2000-03-07
打赏
举报
回复
你的::SendMessage((HWND)pParam,WM_MYMESSAGE,1,i);用法可能有问题,
它是必须在你的对话框处理后才能返回.
这样你的线程都实际堵塞在对话框主线程中了.加入Sleep()就顺序执行了.
sundy
2000-03-07
打赏
举报
回复
我是用AfxBeginThread()开的线程,优先级是默认的NORMAL级,五个线程函数几乎一样
下面的是第一个线程:
UINT MyThread1(LPVOID pParam)
{
volatile int i,j;
for (i=0;i<=3000;i++)
{
for (j=0;j<=2;j++)
{
Sleep(1)//不加就不行,不知为什么?
}
::SendMessage((HWND)pParam,WM_MYMESSAGE,1,i);//1表示第一个线程
}
}
第二个线程发出::SendMessage((HWND)pParam,WMMYMESSAGE,2,i);//2 表示第二个线程
...
WM_MYMESSAGE主要用于处理界面上的五个静态文本的更新
box
2000-03-07
打赏
举报
回复
同意wzq和Lin 的观点。
但有一点,wzq说“加入Sleep()就顺序执行了”,好象不妥。操作系统对CPU资源的调度有着自己的算法,执行顺序是完全用户无法干预和预测的,不管你使用SendMessage()还是PostMessage().
如果你希望这几个线程按照固定的顺序被主线程处理,你可以考虑使用互斥量.
gun2
2000-03-07
打赏
举报
回复
我觉得你给的信息太少了,不足以看出问题所在。不过,sleep()函数对于小于50的调用是非常不准确的,这是和系统的定时机制有关。但sleep()还有另外一个作用是使调用sleep()的线程释放对cpu的控制权,导致线程间的切换。请给出进一步的描述。
lux21
2000-03-06
打赏
举报
回复
线程的优先级是多少?
fupf88
2000-03-06
打赏
举报
回复
是主线程停止响应吗?
Sleep(1)也无关紧要啊
精通Android多
线程
视频教程
通过本课程的学习,让你透彻精通Android多
线程
编程,课程内容包括:1.UI
线程
和非UI
线程
2.使用Handler发送post请求3.使用Handler处理Message消息4.Handler、Looper、MessageQueue三者的关系5.UI
线程
Handler和工作
线程
Handler6.使用HandlerThread7.更新UI的方法8.使用AsyncTask
qt非thread使用
sleep
_Qt 多
线程
编程之降低
线程
的开销
本文结构如下:概述任务的统一封装形式:QRunnable为什么要统一封装形式?如何使用 QRunnable?如何使用信号槽通信?
线程
池的本质是什么?
线程
池
中
的两种数据之一:任务
线程
池
中
的两种数据之一:
线程
线程
池如何处理这两种数据?如何使用 QThreadPool
线程
池相关
线程
相关任务相关附:所有函数1. 概述一般的多
线程
任务大多是避免主
线程
阻塞(界面卡死),开销
线程
的次数少。现在有一个光伏监控系统...
【Python之旅】第六篇(五):生产者消费者模型实现多
线程
异步交互
虽然标题是“生产者消费者模型实现多
线程
异步交互”,但这里要说的应该还包括Python的消息队列,因为这里多
线程
异步交互是通过Python的消息队列来实现的,因此主要内容如下:1.生产者消费者模型:厨师做包子与顾客吃包子 2.Python的消息队列 3.利用消息队列实现Python多
线程
异步交互 4.再谈耦合度的问题1.生产者消费者模型通过厨师做包子与顾客吃包子...
生产者消费者模型实现多
线程
异步交互
【Python之旅】第六篇(五):生产者消费者模型实现多
线程
异步交互 消息队列生产者消费者模型多
线程
异步交互 摘要:虽然标题是“生产者消费者模型实现多
线程
异步交互”,但这里要说的应该还包括Python的消息队列,因为这里多
线程
异步交互是通过Python的消息队列来实现的,因此主要内容如下: 1 2 3 4 1.生产者消费者模型:厨师做包子与顾客吃包子 2.Pyt...
JVM
线程
集合 多
线程
并发
JVM
线程
集合 多
线程
并发
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章