在工作者线程中非得加入sleep(1)(最后的140分了)

sundy 2000-03-06 08:49:00
我在一个对话框中开了五个工作者线程,如果不在每个线程中加入Sleep(1);就会停止响应,直到五个线程都终止了才行,加入Sleep(0);就会每个线程的进度不一样,这是为什么?
...全文
352 13 打赏 收藏 转发到动态 举报
写回复
用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)也无关紧要啊

15,471

社区成员

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

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