前几天在编写远控的时候,需要在GUI线程之外创建一和工作线程,这样可以避免GUI线程因为执行工作的代码而出现未响应的状态,这样我们就单独创建一个工作线程,来专门进行通信的处理,这样工作线程与界面线程共同使用CPU的时间片,那么我们就不用担心界面假死了。
但是,创建工作线程后,使用waitForSingleObject函数等待线程结束的时候出现了界面的假死,这下就郁闷了,这是怎么回事呢?原来在工作线程中使用了消息循环,这样的话在主线程中使用了waitforSingleObject,主线程就会被阻塞,要是工作线程也使用了消息循环与主线程相关的操作,那么因为主线程已经被阻塞了,所以子线程得不到相应,那么就出现假死了。
实际上,我们可以不使用waitForSingleObject,因为mfc主线程在不被关闭的话是不会结束的,所以不必使用wait这样的函数进行等待,但是很多情况下,我们又需要知道我们创建的工作线程的情况,所以还是需要了解工作线程的返回值。那么我们可以使用微软提供的函数MsgWaitForMultipleObjects。
参考:http://www.cnblogs.com/shootingstars/archive/2004/07/15/24602.html
http://blog.youkuaiyun.com/byxdaz/article/details/5638680
http://blog.youkuaiyun.com/sysprogram/article/details/17383455