窗口机制消息循环消息队列

窗口机制消息循环消息队列

ID:34486968

大小:182.00 KB

页数:9页

时间:2019-03-06

窗口机制消息循环消息队列_第1页
窗口机制消息循环消息队列_第2页
窗口机制消息循环消息队列_第3页
窗口机制消息循环消息队列_第4页
窗口机制消息循环消息队列_第5页
资源描述:

《窗口机制消息循环消息队列》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、注:以下所说windows线程是指与调用了与图形用户界面相关的函数的线程,而windows进程则是包含windows线程的进程,以区别于一般的进程和线程一个线程只有一个报文队列,但可以有多个窗口,每个窗口都有WndProc函数窗口对象如下:Typedefstruct_WINDOW_OBJECT{PW32THREADINFOti;PDESKTOPDesktop;……UNICODE_STRINGWindowName;……RECTWindowRect;……//pointertotheowningthread

2、’smessagequeuePUSER_MESSAGE_QUEUEMessageQueue;//指向所属进程的消息队列Struct_WINDOW_OBJECT*FirstChild;Struct_WINDOW_OBJECT*LastChild;Struct_WINDOW_OBJECT*NextSibling;Struct_WINDOW_OBJECT*PrevSibling;//ENTRYinthelistofthreadwindowsLIST_ENTRYThreadListEntry;//Handle

3、totheownerwindowHWNDhOwner;……WNDPROCWndProc;//消息处理函数PRTHREADOwnerThread;//指向具体窗口所属线程的ETHREAD结构……}WINDOW_OBJECT;当一个线程第一次被建立时,系统假定线程不会被用于任何与用户相关的任务。这样可以减少线程对系统资源的要求。但是,一旦这个线程调用一个与图形用户界面有关的函数(例如检查它的消息队列或建立一个窗口),系统就会为该线程分配一些另外的资源,以便它能够执行与用户界面有关的任务。因此进程在建立之初

4、,并没有与用户界面相关的数据结构,只有当进程中某一线程调用win32k.sys中的函数时,进程会转化为windows进程,调用为win2k.sys的线程则转化为windows线程。一个进程只要其中有一个线程是windows线程,则就是windows进程。Windows进程除了EPROCESS和KPROCESS外,还有个W32PROCESS结构,即系统为windows进程所分配的另外一些资源。且EPROCESS结构中的指针Win32Process指向这个数据结构。当线程转化为windows线程时,系统会

5、为线程分配一个THREADINFO结构这个THREADINFO结构包含一组成员变量,利用这组成员,线程可以认为它是在自己独占的环境中运行。THREADINFO是一个内部的、未公开的数据结构,用来指定线程的投递消息队列(posted-messagequeue)、发送消息队列(send-messagequeue)、应答消息队列(reply-messagequeue)、虚拟输入队列(virtualized-inputqueue)、唤醒标志(wakeflag)、以及用来描述线程局部输入状态的若干变量。这里的登

6、记消息即为投递消息(posted-message)注意:这里的各个消息队列的消息均指的时被投递的消息,被发送的消息……即发送方直接把消息放入接收方的相应消息队列当线程有了与之相联系的THREADINFO结构时,线程就有了自己的消息队列集合。Windows中有两种类型的消息队列1)系统消息队列(SystemMessageQueue)这是一个系统唯一的Queue,设备驱动(mouse,keyboard)会把操作输入转化成消息存在系统队列中,然后系统会把此消息放到目标窗口所在的线程的消息队列(thread-

7、specificmessagequeue)中等待处理2)线程消息队列(Thread-specificMessageQueue)每一个GUI线程都会维护这样一个线程消息队列。(这个队列只有在线程调用GDI函数时才会创建,默认不创建)。然后线程消息队列中的消息会被送到相应的窗口过程(WndProc)处理.typedefstructtagMSG{  HWNDhwnd;//消息要发向的窗口句柄  UINTmessage;//消息标示符,以WM_开头的预定义值  WPARAMwParam;  LPARAMlPa

8、ram;  DWORDtime;//消息放入消息队列的时间  POINTpt;//消息放入消息队列时鼠标位置}MSG,*PMSG;附:第二个成员变量message指定了消息的标识符。在Windows中,消息是由一个数值来表示的,不同的消息对应不同的数值。但是由于数值不便于记忆,所以Windows将消息对应的数值定义为WM_XXX宏(WM是WindowMessage的缩写)的形式,XXX对应某种消息的英文拼写的大写形式。消息可分为两类:队列消息和非队列消息

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。