消息响应函数的调用者是谁
消息响应函数的调用者是谁,比如OnTimer函数是一个消息响应函数,那么他的调用者应该是系统,那么他是否属于多线程?...
消息响应函数的调用者是谁,比如OnTimer函数是一个消息响应函数,那么他的调用者应该是系统,那么他是否属于多线程?
展开
4个回答
展开全部
不属于。
执行过程是,框架有一个消息处理函数,遍历收到的各种消息,然后调用相应的消息响应函数。
所以这些消息函数都是被一个线程不断调用的。
还有,调用者也不是系统,只是MFC预先提供的一段框架程序,你创建一个Win32项目,看一下那个里面是如何调用消息响应函数,就明白了。MFC相当于帮你做了一个很大的switch结构,由你填写每个消息的处理。
执行过程是,框架有一个消息处理函数,遍历收到的各种消息,然后调用相应的消息响应函数。
所以这些消息函数都是被一个线程不断调用的。
还有,调用者也不是系统,只是MFC预先提供的一段框架程序,你创建一个Win32项目,看一下那个里面是如何调用消息响应函数,就明白了。MFC相当于帮你做了一个很大的switch结构,由你填写每个消息的处理。
追问
麻烦再问下,如果在
while(GetMessage(...))
DispatchMessage(...); // 这个API调用窗口过程, 响应消息.
return 0;
外边套一个死循环的话,单线程能在接受到消息后跳出循环进行处理?过程是什么样的?
追答
窗口程序在运行中,其实是在 while(GetMessage(...))这个里面不断循环的,直到GetMessage收到WM_QUIT消息,才会从while循环中退出;
在循环中,由 DispatchMessage(...) 调用Windows的类(WNDCLASS)中定义的那个消息处理函数lpfnWndProc。
通过上面说明,应该明白在while循环外面套其他循环,对于窗口运行是没啥影响的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不属于.
消息的调用者是系统, 调用线程就是窗口被创建的线程.
如果熟悉SDK 编程, 就知道Windows窗口程序的原理一般如下:
int main(..........)
{
......注册窗口类.
......创建窗口.
while(GetMessage(...))
DispatchMessage(...); // 这个API调用窗口过程, 响应消息.
return 0;
}
由上可以看出, 程序只有一个线程, 在线程尾部while不断捕获消息, 无限循环处理, 当窗口关闭的时候, while跳出, main函数返回.
MFC把注册和创建窗口包装在CWnd类中, 消息循环包装在CApp中, 把整个消息响应的过程分割给各个函数, OnPaint, OnTimer等等.
消息的调用者是系统, 调用线程就是窗口被创建的线程.
如果熟悉SDK 编程, 就知道Windows窗口程序的原理一般如下:
int main(..........)
{
......注册窗口类.
......创建窗口.
while(GetMessage(...))
DispatchMessage(...); // 这个API调用窗口过程, 响应消息.
return 0;
}
由上可以看出, 程序只有一个线程, 在线程尾部while不断捕获消息, 无限循环处理, 当窗口关闭的时候, while跳出, main函数返回.
MFC把注册和创建窗口包装在CWnd类中, 消息循环包装在CApp中, 把整个消息响应的过程分割给各个函数, OnPaint, OnTimer等等.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询