工作者线程和用户界面线程?
1)界面最好是放在一个线程中进行统一管理。
2)界面最好让主线程来管理3)在MFC中,如果主界面收到WM_QUIT,即意味着要关闭窗口,那么主线程也就退出/返回/return了。4)主线程退出,其他辅助线程不管有没有执行完成,都会因为主线程的退出而退出,主线程退出也就意味着进程结束了。楼主说的还不够精确。我的理解是:工作线程进行计算,主线程的主界面不负责显示工作进度,只要有工作线程,主界面应该创建一个界面来显示工作线程的工作进度,如果工作线程完成了,进度显示界面也应该消失。如果是这样的逻辑,可以这样布局:1)专门定义一个进度界面的窗口类,为了能与工作线程进行交流,需要为这个进度界面窗口类定制各种自定义消息,并且该类的窗口实例应该作为主界面的子窗口,这样做是当主界面被关闭,作为子窗口也会被关闭。2)工作线程应该由主界面创建,进度界面也由主界面创建。
3)工作线程汇报工作进度,主界面不干预,汇报工作直接在工作线程与进度界面之间通过自定义消息实现。
4)工作线程需要return前给主界面发送即将完成消息。
5)所有线程都有“完成信号”状态,即线程在运行时,处于无信号状态,线程完成退出,处于有信号状态。不熟悉可以看下“系统编程”有关内容。利用该特性,主线程在收到工作线程发来的即将完成消息后,调用WaitForSingleObject,将自己临时阻塞,阻塞会造成主界面无法响应用户鼠标键盘消息,形成假死状态。但这种情况几乎看不到。主线程收到工作线程消息才调用WaitForSingleObject,才会阻塞,但工作线程这个时候基本上已经退出了,因此WaitForSingleObject几乎没有等待就返回了,因此主界面被阻塞的估计值是小于1秒钟。即使是最坏的情况下,多个工作线程同时完成,主界面需要依次调用WaitForSingleObject,也不会有问题。6)WaitForSingleObject返回了,标志工作线程结束工作,主界面就可以安全地关闭进度界面窗口。
Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有