正在阅读:《编程高手箴言》读后感(3)《编程高手箴言》读后感(3)

2004-04-07 10:02 出处:CSDN 作者:seacloud 责任编辑:sdq

  当某一程序切入时,其他程序就会被切出。当切换出去时,整个消息队列也就切换出去了。所以,整个消息的处理就很简单了。
===================================================
  这一段实在是不清楚,不知道所谓的“切入”、“切出”是什么意思。也看不出所描述的因果关系指什么。应用程序消息处理的简单化主要是应为USER32.dll在幕后做了很多的事情,具体的说明大家可以在《Programming Applications for Microsoft Windows》一书里找到答案。在这本书里,大家可以看到系统在幕后的一些工作。

  注:老实说,Microsoft实在是麻烦,什么东西都是遮遮掩掩的。给段代码不就什么都OK了吗?或者实在不行,出份详细的文档也可以啊。可偏偏MSDN里很多文档也是含含糊糊的。稍微想知道的多一点就要用调试器自己摸了,就一个字,“累”啊。呵呵,当然了,现在有很多大牛都在网上公布了自己的研究结果了,造福后来人啊:-)
  记得当初第一次碰Linux的时候,感觉实在是好。几乎什么都有源代码,感觉在上面开发东西郁闷的时间远远少于在Windows上做开发。我想,什么时候不用再出诸如《Undocumented DOS Secretes》、《UnDocumented WinNT Secretes》之类的书的话,广大同行们幸福的日子就来到了:-)记得在WinXP DDK发布之前,国内外网站上关于如何有Intermedia Driver写一个虚拟网卡的问题讨论的很多,并且好像一直都没有一个圆满的方案。等到XP DDK出来后,里面带了一个例子,一下子就解决了所有问题。难道网上的这么多程序员都不如Microsoft聪明?!还好MFC是给源代码的,我想如果当初没给源代码,那广大的Visual C++的程序员还不知道要被Microsoft怎么折磨呢!

  从MSG的结构可以看出,每个消息都是对应一个窗口的。USER模块是管理窗口的,一般每个窗口自己有一个消息队列。...... 当程序设计中用SendMessage来发送消息时,就会明确指定窗口句柄,当运行此函数后,就会把消息放到此窗口的消息队列中。
===================================================
  从MSG的结构来看,似乎应该每个消息都应该对应一个窗口。然而,MSG的结构中和窗口有关的HWND hwnd可以为0啊。再说另一个和消息有关的函数PostThreadMessage并没有要求一个窗口句柄,而是一个线程句柄。实际上,消息队列应该是属于线程的,而不是窗口的。SendMessage一个很重要的特性是它不是简单的将消息送到消息队列里去,按照MSDN的说法,If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine.If the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure.根据SendMessage的这个特性,有可能调用SendMessage的线程永远进入挂起状态了。具体的例子大家参考《Programming Applications for Microsoft Windows》,这本书里面还介绍另外几个函数,比如SendMessageTimeout,InSendMessage之类的,大家也可以直接参考MSDN。

察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品