请问:窗口过程其实是WinMain主线程创建的一条线程,这种理解是否正确,谢谢

lucio 2007-10-06 03:22:30
初学SDK,想当然认为窗口过程其实是WinMain主线程创建的一条线程(是能接受消息的UI线程),这种理解是否正确???

希望达人指点~~~谢谢

...全文
125 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
siyang 2008-11-02
  • 打赏
  • 举报
回复
学习了,有点收获
siyang 2008-11-02
  • 打赏
  • 举报
回复
学习了,有点收获
wltg2001 2007-10-06
  • 打赏
  • 举报
回复
但是我在WndProc函数里面再一次的显式调用了getMessage,应该可以从消息列队中取到消息啊
=====================
你只有一个线程,在处理一个用时较大的消息时,线程怎么去执行GetMessage呢?虽然WndProc是回调函数,由系统调用,但是毕竟还是在你的线程中的。
至于WINDOWS在内部不开线程调用WndProc,很好理解,线程之间的执行顺序是随机的,但是消息发送却是有顺序要求的。
lucio 2007-10-06
  • 打赏
  • 举报
回复
但是我在WndProc函数里面再一次的显式调用了getMessage,应该可以从消息列队中取到消息啊

不清楚在dispatchmessage之后 windows到底是怎么调用WndProc的,我觉得WINDOWS内部完全可以开一条线程来调用WndProc

不知道我的想法是否合理~~~
wltg2001 2007-10-06
  • 打赏
  • 举报
回复
那么这另一个WndProc是否可能被操作系统调用,从而2个WndProc并发执行??
==========================
不能,一个消息被处理时,如果时间太长,你根本就收不到另外的消息。
lucio 2007-10-06
  • 打赏
  • 举报
回复


由于WndProc只是随窗口类注册,并不显式的调用,而是由操作系统来调用,那么

如果我一个WINDOWS程序注册有2个WndProc函数(2个窗口类),那么一个WndProc函数正在执行时(比如里面有很耗时的计算),同时这个函数里还调用getMessage dispatchmessage 那么这另一个WndProc是否可能被操作系统调用,从而2个WndProc并发执行??


wltg2001 2007-10-06
  • 打赏
  • 举报
回复
不正确,普通的SDK程序只有一个线程,按照你的理解一个普通的SDK至少有两个线程,但是实际上却只有一个,楼主对线程的概念理解有问题,对于Windows来说,线程是它的调度单位, 每个线程之间的执行顺序是随机的。
lucio 2007-10-06
  • 打赏
  • 举报
回复
如果一个程序有N个窗口(即:有N个窗口句柄,这很正常),那么当得到一条消息后,是否就有N条线程在执行WndPrc(至于函数体可以是相同也可以是不同,反正就是N条线程在跑),当所有的WndPrc线程跑完了,才回到消息循环等待/获取第2条消息.

这种理解是否对,望指点~~~thx
Yofoo 2007-10-06
  • 打赏
  • 举报
回复
不一定是创建的线程, 直接由WinMain主线程处理消息也可以

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧