VC小技巧(9)-----消息循环重载
来源:互联网 发布:淘宝网上都可以卖什么 编辑:程序博客网 时间:2024/05/20 19:18
当应用程序进行复杂计算或占用很多系统资源的操作时,用户点击程序界面按钮时无法响应,有两种解决方法:计算线程,消息循环重载技术,即在应用程序中处理Windows消息循环。这样既可以在主线程中进行复杂计算以满足实时计算要求,又能即使响应用户输入,随时中止计算!
举例如下:
while(!m_bStop && iStep <= 500) {
iStep++;
m_pgProgress.StepIt();
Sleep(20);
DoEvents(); // 二次消息循环函数
}
void DoEvents()
{
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { //从Windows消息队列中取出消息
if (msg.message== WM_QUIT)//如果消息为退出,发送退出消息
{
::PostQuitMessage(-1);
}
if(!AfxGetApp()->PreTranslateMessage(&msg))//如果无法预处理消息
{
::TranslateMessage(&msg);//转换消息
::DispatchMessage(&msg);//发送消息
}
}
AfxGetApp()->OnIdle(0);AfxGetApp()->OnIdle(1);//消息队列为空时闲置一段时间
}
举例如下:
while(!m_bStop && iStep <= 500) {
iStep++;
m_pgProgress.StepIt();
Sleep(20);
DoEvents(); // 二次消息循环函数
}
void DoEvents()
{
MSG msg;
if (::PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { //从Windows消息队列中取出消息
if (msg.message== WM_QUIT)//如果消息为退出,发送退出消息
{
::PostQuitMessage(-1);
}
if(!AfxGetApp()->PreTranslateMessage(&msg))//如果无法预处理消息
{
::TranslateMessage(&msg);//转换消息
::DispatchMessage(&msg);//发送消息
}
}
AfxGetApp()->OnIdle(0);AfxGetApp()->OnIdle(1);//消息队列为空时闲置一段时间
}
- VC小技巧(9)-----消息循环重载
- 札记-VC使用小技巧
- VC小技巧(2)-----托盘区图标操作
- VC小技巧(8)-----创建桌面图标
- VC小技巧(10)-----运行后自删除程序
- VC小技巧(11)-----窗体透明
- VC小技巧(4)----画出自己的窗口区域
- VC小技巧(5)----单文档框架下的全屏显示
- VC小技巧(3)---右键菜单的使用
- live555学习笔记3-消息循环
- live555学习笔记3-消息循环
- live555学习笔记3-消息循环
- live555学习笔记-消息循环
- live555学习笔记3-消息循环
- VC小技巧(1)---禁止同一应用程序同时运行
- VC小技巧(6)-----单文档多视图实现视图间的切换
- VC小技巧(7)-----注册表的简单设置和查询函数
- VC++深入详解 - 消息处理
- 入侵ADSL,就这么简单
- 2006.11.6
- 使用Guid值作为数据库行标识
- CSDN第一天
- 重叠(Overlapped)I/O模型----重叠I/O函数----传输数据函数WSASend()
- VC小技巧(9)-----消息循环重载
- ASP 常用自写函数
- asp当中判断函数一览
- 显卡工作原理详解
- 树和自联表(一)
- 固定表格大小
- 简单json对象for asp
- 找了自己的第一份工作
- .net2005 radiosbuttonlist 控件控制文本显示!