关于windows线程

来源:互联网 发布:怎么修改淘宝账户名 编辑:程序博客网 时间:2024/05/16 02:20

    windows为 每个线程维护一个消息队列,在这个线程中通过getmessage来获得线程消息队列中的消息。然后通过dispatchmessage把消息送给窗口函数。单谈dispatchmessage是非常智能的,能根据窗口绑定的窗口函数去找该调用哪个窗口函数。在创建窗口前就已经注册了窗口函数了,所以dispatch找的到时哪个窗口函数。

    一个普通的工作线程也是有消息队列的,只是没有GetMessage去获得这个队列中的消息。比如说在主线程中去show一个模态对话框,因为模态对话框里面有一个GetMessage循环所以就不需要主线程中的GetMessage趣获得消息了,所以模态对话框自成一体。

   这个在工作线程中也是OK的。在工作线程中创建一个模态对话框一样工作的非常好。因为模态对话框中的GetMessage可以取得工作线程中的消息。如果换成一个普通的窗口或者非模态对话框就不可以,因为他们自身没有GetMessage这个获取消息的循环,所以窗口收不到消息,得不到任何刷新的机会,所以就看不到窗口。

 

  在MFC中AfxBeginThread可以创建一个UI线程,这个UI线程其实就是比普通线程多了一个获取消息的循环while(GetMessage...){ ...}

  这样在这个线程中创建的窗口就可以得到这个循环分派的消息。跟主线程的工作方式一样。

 

原创粉丝点击