【面试官】说:一个线程对应一个窗口(创建的关系),同时一个线程被系统分配了一个消息队列。是1:1:1的关系。
------------------------
一旦线程调用一个与图形用户界面有关的函数(例如检查
它的消息队列或建立一个窗口),系统就会为该线程分配一些另外的资源,以便它能够执行与用户
界面有关的任务。特别是,系统分配一个T H R E A D I N F O结构,并将这个数……
[/Quote]
谢谢,我看了下,又看了Windows编程。【总结如下】:
1.在MFC程序框架里面,CWinThread专门负责线程创建的,它可以创建用户界面线程,及工作者线程。
其中用户界面线程是包含消息队列的,而工作者线程是不包含消息队列的。
即【一句话】:用户界面线程对应一个消息队列。
2.CWinThread类和CWnd类都派生自CCmdTarget,而CDialog对话框类、视图类CView都派生自CWnd。
【深入浅出MFC里一句话】:不是每一个窗口都产生一个线程(因为要付出昂贵的线程切换代价)。
即,深入理解之:一个线程可以对应多个窗口。主线程可以创建出其所要的全部窗口。
【结论】一个UI线程就1组消息队列集合,一个线程可以创建多个窗口。
和您的一致,谢谢您!
【面试官】说:一个线程对应一个窗口(创建的关系),同时一个线程被系统分配了一个消息队列。是1:1:1的关系。
------------------------
一旦线程调用一个与图形用户界面有关的函数(例如检查
它的消息队列或建立一个窗口),系统就会为该线程分配一些另外的资源,以便它能够执行与用户
界面有关的任务。特别是,系统分配一个T H R E A D I N F O结构,并将这个数据结构与线程联系起来。
这个T H R E A D I N F O结构包含一组成员变量,利用这组成员,线程可以认为它是在自己独占
的环境中运行。T H R E A D I N F O是一个内部的、未公开的数据结构,用来指定线程的登记消息队
列(posted-message queue)、发送消息队列( send-message queue)、应答消息队列( r e p l y -
message queue)、虚拟输入队列(virtualized-input queue)、唤醒标志(wake flag)、以及用来描
述线程局部输入状态的若干变量。