关于消息处理的一个问题????
大家还记得《VC++技术内幕》(第四版)的P212有这样的一段代码
volatile int nTemp;
for (m_nCount = 0; m_nCount < nMaxCount; m_nCount++) {
for (nTemp = 0; nTemp < 10000; nTemp++) {
// uses up CPU cycles
}
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
我的问题是,当我将PeekMessage改为GetMessage时那个进度条为什么就前进的非常慢,而且我等了很久也就只显示了一格,我不明白的是按这我的理解每当程序执行完for (nTemp = 0; nTemp < 10000; nTemp++)后就会执行if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) 而这个for 循环应该是花不了多少时间的吧,如果改为GetMessage每当执行完for 后就可以处理消息队列里的消息了啊。为什么我改了后有那样大的差距啊?还有就是volatile 是什么意思,我看了MSDN可能由于英语不好的原因吧,不能理解是什么意思!在这先谢了!
volatile int nTemp;
for (m_nCount = 0; m_nCount < nMaxCount; m_nCount++) {
for (nTemp = 0; nTemp < 10000; nTemp++) {
// uses up CPU cycles
}
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
我的问题是,当我将PeekMessage改为GetMessage时那个进度条为什么就前进的非常慢,而且我等了很久也就只显示了一格,我不明白的是按这我的理解每当程序执行完for (nTemp = 0; nTemp < 10000; nTemp++)后就会执行if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) 而这个for 循环应该是花不了多少时间的吧,如果改为GetMessage每当执行完for 后就可以处理消息队列里的消息了啊。为什么我改了后有那样大的差距啊?还有就是volatile 是什么意思,我看了MSDN可能由于英语不好的原因吧,不能理解是什么意思!在这先谢了!
...全文
相关推荐
Android应用程序消息处理机制
Android应用程序与传统的PC应用程序一样,都是消息驱动的。也就是说,在Android应用程序主线程中,所有函数都是在一个消息循环中执行的。Android应用程序其它线程,也可以像主线程一样,拥有消息循环。Android应用程序主线程是一个特殊的线程,因为它同时也是UI线程以及触摸屏、键盘等输入事件处理线程。主线程对消息循环很敏感,一旦发生阻塞,就会影响UI的流畅度,甚至发生ANR问题。这个PPT讲Android应用程序线程消息循环原理,主要涉及到Handler和Looper两个类,以及根据消息循环的不同使用场景,总结出三种线程使用模型。掌握Android应用程序消息处理机制,有助于我们熟练地使用同步和异步编程,提高程序的运行性能
消息处理状态机,一个消息处理框架代码
消息处理状态机,一个消息处理框架代码,接收Client发的TCP请求,入消息队列,主循环一次处理三条消息。
MFC 多个窗口消息共享同一个消息处理函数demo
VC MFC 多窗口消息共享同一个消息处理函数。
按键消息处理函数按键消息处理函数
按键消息处理函数,按键消息处理函数,按键消息处理函数按键消息处理函数
字符消息处理字符消息处理
该实例的功能是实现单文档应用程序界面中,当用户通过键盘键入字符时,在视图窗口依次显示键入的字符。当用户按下回车键时,进行换行输出。


非技术类
