关于消息处理的一个问题????

lc79 2002-01-29 04:32:59
大家还记得《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可能由于英语不好的原因吧,不能理解是什么意思!在这先谢了!



...全文
35 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
eion 2002-01-29
  • 打赏
  • 举报
回复
volatile 就是别让你的编译程序来优化你的volatile 申明的变量,因为它申明的变量有可能在程序的外部被改变,比方说系统的时间,如果编译器优化了你的变量,那么就有可能出错。

具体点吧
有一个变量,系统时间,那么系统时间中断要修改,你的程序要读取。如果在一段时间里你经常使用,那么编译器就有可能将这个变量放到CPU的寄存器中,而这时时间中断过来,或者采用DMA模式,该程序直接就修改了你的内存中的数据,而你读取数据时读取得还是CPU寄存器中的数据【被优化到寄存器中以加快运行速度】,所以——Error
zheng_rui 2002-01-29
  • 打赏
  • 举报
回复
GetMessage要等待消息的。
PeekMessage 不等待
Unlike GetMessage, the PeekMessage function does not wait for a message to be posted before returning.
所以如此

1,650

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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