工作者线程中,可以创建消息队列吗在Win32中
发布网友
发布时间:2022-05-06 18:05
我来回答
共1个回答
热心网友
时间:2022-07-01 16:37
消息线程与线程?Windows编程里并没有这种划分。
线程有两种,分别叫用户界面线程和工作者线程,很多人误以为这两个种类是在线程最初建立时为其赋予的天生的属性,实际上它们的区别不在于建立时,而在于运行时是否创建了消息队列,任何线程在最初建立时是一样的。
无论是系统在启动窗口程序时为其建立一个主线程,还是程序员在主线程运行时调用CreateThread建立一个新线程,内部过程以及为线程建立的内部数据结构是一样的,都是调用Ntdll.dll的RtlUserThreadStart函数并传入线程入口指令地址和一个线程参数(系统启动主线程时传入的线程参数为0)。这时它们都没有自己的线程消息队列,都是工作者线程。但是窗口程序的主线程往往在启动后很快建立一个窗口并循环调用GetMessage抓取消息,而一旦线程调用一个与图形用户界面有关的函数,如GetMessage/PeekMessage检查消息队列或建立一个窗口,系统就会为该线程分配一些与用户界面相关的资源,尤其是分配一个用于管理消息队列的THREADINFO结构,这时线程的消息队列就建立起来,主线程也就转变为用户界面线程。