Windows是不是每个线程都有消息队列的问题

Windows操作系统为每个UI线程创建一个消息队列,用于处理键盘、鼠标等输入设备产生的事件。当线程调用GDI和User函数时,系统为其创建消息队列。消息从系统消息队列移到对应UI线程的消息队列,由线程函数启动的消息循环处理。若线程函数无消息循环,窗体将无法正确绘制。
摘要由CSDN通过智能技术生成
 

       今天从网上搜集了下,加上试了一个小程序,感觉下面的一种说法是比较准确地。http://cnn237111.blog.51cto.com/2359144/606954

    在Windows应用程序中,操作系统会监控计算机上的键盘和鼠标等输入设备,为每一个输入事件(由用户操作所引发,比如用户按了某个键)生成一个消息。根据事件发生时的情况(比如当前 激活的窗体负责接收用户按键,而依据用户点击鼠标的坐标可以知道用户在哪个窗体区域内点击了鼠标),操作系统会确定出此消息应该发给哪个窗体对象。

       这些生成的消息会统一地先临时放置在一个“系统消息队列(system message queue)”中,然后,操作系统有一个专门的线程负责从这一队列中取出消息,根据消息的目标对象(就是窗体的句柄),将其移动到创建它的UI线程所对应的消息队列中。操作系统在创建进程和线程时,都同时记录了大量的控制信息(比如通过进程控制块和句柄表可以查找到进程所创建的所有线程和引用的核心对象),因此,根据窗体句柄来确定此消息应属于哪个UI线程对于操作系统来说是很简单的一件事。

       注意,每个UI线程都有一个消息队列,而不是每个窗体一个消息队列!

    那么,操作系统是不是会为每一个线程都创建一个消息队列呢?

     答案是:只有当一个线程调用Win32 API中的GDI(Graphics Device Interface)和User函数时,操作系统才会将其看成是一个UI线程&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值