为了方便您阅读最新章节,请记住“闪文书库”网址 www.shanwen.com,注册会员收藏您喜爱的书籍
====>>>公告:晚上6点-11点高峰期,可能出现图片打开缓慢,如果太长时间没有打开,请刷新
第一卷第一章
?单位线程是如何处理消息的
Windows的消息处理机制是用如下代码进行消息处理的:
MSGmessage;
While(::GetMessage(&message,NULL,0,0)){
::TranslateMessage(&message);
::DispatchMessage(&message);
}
当消息到达时,由TranslateMessage进行必要的转换,例如:将WM_KEYDOWN消息转换为包含有ASCII字符的WM_CHAR消息,
然后由DispatchMessage进行发送,当处理完成后,DispatchMessage返回.
放弃控制
如果在等待方式下,DispatchMessage必须等待处理完成后才能返回,在此之前将不能处理任何消息,
而下面的代码可以做到即使没有消息到达程序的情况下也立即返回
MSGmessage;
While(::PeekMessage(&message,NULL,0,0,PM_REMOVE)){
::TranslateMessage(&message);
::DispatchMessage(&message);
}
计时器是不依赖CPU的时钟速度的.注意的是因为Windows并不是实时的操作系统,所以,如果你指定的周期小于100毫秒的话,
计时器事件之间的周期可能不精确.有了计时器,有时可以替代多线程情况,例如下面的代码就允许在循环内仍然接收处理消息.这是一个进度条,
在OnTimer里面改动进度条的显示,同时可以自定义CANCEL消息,在OnCancel中将程序终止.
VoidCDlg::OnStart()
{
MSGmessage;
SetTimer(0,100,NULL);
GetDlgItem(IDC_START)->EnableWindow(FALSE);//使按钮无效
VolatileintnTemp; //使变更不保存在寄存器中,因为变量如果保存在寄存器中,在线程的切换过程中可能会出现值的错误.
For(m_nCount=0;m_nCount
为了方便下次访问,请牢记闪文书库网址www.shanwen.com,您的支持是我们最大的动力。注册会员