VC小技巧(9)-----消息循环重载

王朝vc·作者佚名  2007-04-29
窄屏简体版  字體: |||超大  

当应用程序进行复杂计算或占用很多系统资源的操作时,用户点击程序界面按钮时无法响应,有两种解决方法:计算线程,消息循环重载技术,即在应用程序中处理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);//消息队列为空时闲置一段时间

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航