首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

什么是UI线程?和工作线程的本质区别是什么?该如何处理

2012-01-26 
什么是UI线程?和工作线程的本质区别是什么?是不是在Win32中没有UI线程这个概念,它是MFC弄出来的概念?创建U

什么是UI线程?和工作线程的本质区别是什么?
是不是在Win32中没有UI线程这个概念,它是MFC弄出来的概念?
创建UI线程和new一个窗口有什么区别呢?

[解决办法]
工作者线程确实没有消息队列,但是你可以强制加一个,一般只要你的线程中出现了GDI的调用就会出现一个消息队列,你上面例子中调用了GetMessage,强制加入了一个消息循环,系统就会给你的进程加一个消息队列,同样用PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE) 也可以强制系统加入一个消息队列.
[解决办法]

刚创建的线程是没有消息队列的,它只是执行一个系统回调函数,函数执行完毕返回时,线程即结束。

当一个线程第一次调用GetMessage或PeekMessage时,系统会为该线程创建一个消息队列。

向该线程PostThreadMessage,或者向被该线程创建的窗体PostMessage/SendMessage,即可把消息送入该线程的消息队列。

线程收到消息后可以通过DispatchMessage派分消息到目标窗口的消息过程WndProc,这个过程是该窗体被创建时通过RegisterClass注册的。

在WndProc中通过典型的switch(Msg.message)判断消息类型,进而进行相应的处理。

所谓的UI线程、工作者线程是MFC中CThread的两种实现模式。UI线程模式时内部创建了消息队列,并执行取消息--派分消息的循环过程,为用户屏蔽了这一操作。

热点排行