[原创] MicroWindows学习笔记之对于SendMessage的疑问

  当初在学Windows编程时,总觉得奇怪,为什么对于窗口、控件的操作,要通过WM_XXX消息的形式呢?通过API方法简单明了,非要用消息不是多此一举吗!前段时间与同事讨论MicroWindows时,突然发现这样做是另有目的。

大多数的图形系统,它的控件系统基本上都不支持多线程操作,即如果想操作控件的东西,那你只能在该控件对象所在的图形线程里做,在其他线程里操作都会有意想不到的后果,用户自己承担责任。这个主要是因为控件体系太过于庞大,做多线程保护会使整个工作量大大增加,而对于应用来说,单线程操作也基本上能满足要求。所以,应用在开发时,都需注意这一点。

Windows通过消息来调用控件的方法,就可以有效的避免多线程操作的问题,因为通过消息把所有的操作进行序列化,放在图形线程里去执行,相当于做了COM里套间的功能。

如果想达到同步执行方法的话,可通过SendMessage方法。所以,对于SendMessage,我觉得MicroWindows的实现是有问题的,它只是简单的调用了窗口的回调函数(注册在窗口类上的WndProc),而没有考虑到多线程问题。如果在非图形线程里调用了SendMessage的话,那它有可能会在该线程里调用控件的方法,与图形线程冲突而导致问题。

 

posted on 2010-04-05 14:11  高原  阅读(468)  评论(0)    收藏  举报

导航