在工作者线程中非得加入sleep(1)(最后的140分了) 是主线程停止响应吗?Sleep(1)也无关紧要啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得你给的信息太少了,不足以看出问题所在。不过,sleep()函数对于小于50的调用是非常不准确的,这是和系统的定时机制有关。但sleep()还有另外一个作用是使调用sleep()的线程释放对cpu的控制权,导致线程间的切换。请给出进一步的描述。 我是用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主要用于处理界面上的五个静态文本的更新 你的::SendMessage((HWND)pParam,WM_MYMESSAGE,1,i);用法可能有问题,它是必须在你的对话框处理后才能返回.这样你的线程都实际堵塞在对话框主线程中了.加入Sleep()就顺序执行了. for (i=0;i<=3000;i++) { for (j=0;j<=2;j++) { Sleep(1)//不加就不行,不知为什么? } }可能CPU占用率太高,必须强迫释放 同意wzq,SendMessage必须等待消息处理完才返回,建议换成PostMessage试试,另外,你的主线程在处理消息时要注意代码重入问题,尽量避免使用全局变量。 同意wzq和Lin 的观点。但有一点,wzq说“加入Sleep()就顺序执行了”,好象不妥。操作系统对CPU资源的调度有着自己的算法,执行顺序是完全用户无法干预和预测的,不管你使用SendMessage()还是PostMessage().如果你希望这几个线程按照固定的顺序被主线程处理,你可以考虑使用互斥量. 十在对不起大家,上面的代码有误,PostMessage写成SendMessage了,我反复实验,结论如下:用PostMessage()就一定要加Sleep(1);用SendMessage()不加Sleep(1)也行。我想了一下,可能是用PostMessage五个线程会一下发出很多消息,主线程来及处理,就停止响应了。 我也这样认为,用PostMessage()五个线程会一下发出很多消息,主线程来不及处理,但不会停止响应,只是很“忙”。而SendMessage()线程要等待主线程的返回,消息发送速度比PostMessage()慢. 循环占用cpu过多,必需用sleep(1)释放,我猜你做的循环是用来延时的,那为什么不用消息或者wait类函数呢? 同意jamesw,fbq,forgettor等人的观点 这个结果不是我想要的》》》》》》》》》》》 串口线程中接受数据,如何在界面上显示出来 CRichEditView 画图问题 急,请高手帮我看一下,谢谢! 串口通信中比较奇怪的问题:刚开机时串口收不到数据 如何解决一个看得见的内存泄漏问题? 望各位大虾出手相助,谢谢!! 请问 win2k 和 xp 中的图片缩略图是如何实现的,VC 中是否可以做到? 如何编程修改网卡mac地址? 请问怎么向EDIT框加字符串 怎样用Winsock实现网络中任意两台主机任意时刻的信息交换? 访问DBF
下面的是第一个线程:
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主要用于处理界面上的五个静态文本的更新
它是必须在你的对话框处理后才能返回.
这样你的线程都实际堵塞在对话框主线程中了.加入Sleep()就顺序执行了.
{
for (j=0;j<=2;j++)
{
Sleep(1)//不加就不行,不知为什么?
}
}
可能CPU占用率太高,
必须强迫释放
但有一点,wzq说“加入Sleep()就顺序执行了”,好象不妥。操作系统对CPU资源的调度有着自己的算法,执行顺序是完全用户无法干预和预测的,不管你使用SendMessage()还是PostMessage().
如果你希望这几个线程按照固定的顺序被主线程处理,你可以考虑使用互斥量.
用PostMessage()就一定要加Sleep(1);
用SendMessage()不加Sleep(1)也行。
我想了一下,可能是用PostMessage五个线程会一下发出很多消息,主线程来及处理,就停止响应了。
而SendMessage()线程要等待主线程的返回,消息发送速度比PostMessage()慢.