标签:网上 post 状态 响应 其他 star == 包括 循环
在单线程应用中,我们知道,当程序进入某个需要长时间处理的函数A的时候,系统将不会响应用户的各种操作包括关闭应用程序,程序将进入假死状态,也就是界面停止响应其他操作。
关于C#可以直接在while循环里调用Application.DoEvents();
1 bool IsStart=false 2 3 while(!IsStart) 4 { 5 //事件; 6 Application.DoEvents(); 7 } 8 9 //IsStart可在其他按钮或同一按钮下改变为true 即结束此循环
关于C++中MFC里做界面,也是我现在遇到的问题,可以如下解决:
1.同上面C#一样,把Application.DoEvents(),换成C++中的:AfxGetApp()->PumpMessage();
2.创建一个DoEvent函数,同样把C#例子中的替换掉就行了:
1 //事件处理函数,镶入到循环中,使得其它消息有机会得到处理 2 3 BOOL DoEvents() 4 { 5 MSG msg; 6 ::GetMessage(&msg,0,0, 0); 7 if (msg.message == WM_QUIT) 8 { 9 PostQuitMessage(msg.wParam); 10 return FALSE; 11 } 12 else 13 { 14 ::TranslateMessage(&msg); 15 ::DispatchMessage(&msg); 16 return TRUE; 17 } 18 }
在网上查了好多资料,基本都是创建一个DoEvent,今天偶然发现了方法1
分享出来给大家。如有错误还望指正。
标签:网上 post 状态 响应 其他 star == 包括 循环
原文地址:https://www.cnblogs.com/oulton/p/9019930.html