消息响应函数的调用者是谁

消息响应函数的调用者是谁,比如OnTimer函数是一个消息响应函数,那么他的调用者应该是系统,那么他是否属于多线程?... 消息响应函数的调用者是谁,比如OnTimer函数是一个消息响应函数,那么他的调用者应该是系统,那么他是否属于多线程? 展开
 我来答
自由翱翔海阔天空
2012-07-23 · TA获得超过316个赞
知道小有建树答主
回答量:282
采纳率:0%
帮助的人:134万
展开全部
windows是多线程的;
响应函数由系统调用,但由窗口的句柄管理;

系统只是负责接到消息后引发响应函数;具体哪个窗体的哪个消息引发什么样的响应,由窗口程序控制;
追问
也就是系统接收到消息后,把需要响应的函数地址发给调用它的线程,还是由原来的线程控制了是吧?
追答
不是的

操作系统会保存这些响应函数的地址;
只是这个函数地址是窗口告诉系统的;
百度网友6eab688
推荐于2016-09-03 · TA获得超过4691个赞
知道大有可为答主
回答量:962
采纳率:50%
帮助的人:945万
展开全部
不属于。
执行过程是,框架有一个消息处理函数,遍历收到的各种消息,然后调用相应的消息响应函数。
所以这些消息函数都是被一个线程不断调用的。
还有,调用者也不是系统,只是MFC预先提供的一段框架程序,你创建一个Win32项目,看一下那个里面是如何调用消息响应函数,就明白了。MFC相当于帮你做了一个很大的switch结构,由你填写每个消息的处理。
追问
麻烦再问下,如果在
while(GetMessage(...))
DispatchMessage(...); // 这个API调用窗口过程, 响应消息.
return 0;
外边套一个死循环的话,单线程能在接受到消息后跳出循环进行处理?过程是什么样的?
追答
窗口程序在运行中,其实是在 while(GetMessage(...))这个里面不断循环的,直到GetMessage收到WM_QUIT消息,才会从while循环中退出;
在循环中,由 DispatchMessage(...) 调用Windows的类(WNDCLASS)中定义的那个消息处理函数lpfnWndProc。

通过上面说明,应该明白在while循环外面套其他循环,对于窗口运行是没啥影响的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Bk0X
2012-07-23 · TA获得超过9413个赞
知道小有建树答主
回答量:1217
采纳率:60%
帮助的人:666万
展开全部
不属于.
消息的调用者是系统, 调用线程就是窗口被创建的线程.

如果熟悉SDK 编程, 就知道Windows窗口程序的原理一般如下:

int main(..........)
{
......注册窗口类.
......创建窗口.

while(GetMessage(...))
DispatchMessage(...); // 这个API调用窗口过程, 响应消息.
return 0;
}

由上可以看出, 程序只有一个线程, 在线程尾部while不断捕获消息, 无限循环处理, 当窗口关闭的时候, while跳出, main函数返回.

MFC把注册和创建窗口包装在CWnd类中, 消息循环包装在CApp中, 把整个消息响应的过程分割给各个函数, OnPaint, OnTimer等等.
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
词朵丨寂z
2012-07-23
知道答主
回答量:63
采纳率:0%
帮助的人:12.1万
展开全部
555
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式