在单线程应用中,由用户结束大循环的方案
来源:互联网 发布:java中的sleep 编辑:程序博客网 时间:2024/06/15 01:01
在单线程应用中,我们知道,当程序进入某个需要长时间处理的函数A的时候,系统将不会响应用户的各种操作包括关闭应用程序,程序将进入假死状态,直到函数A返回;那么我们是否有机会让用户终止当前的处理呢?答案是肯定的;
由此,我们创建一个Doevent函数,该函数在用于在某个处理的过程未结束前,使得其它消息能得到被处理的机会:
BOOL bInLoop=FALSE; //循环标志//事件处理函数,镶入到循环中,使得其它消息有机会得到处理BOOL DoEvents(){ MSG msg; ::GetMessage(&msg,0,0, 0); if (msg.message == WM_QUIT) { PostQuitMessage(msg.wParam); return FALSE; } else { ::TranslateMessage(&msg); ::DispatchMessage(&msg); return TRUE; }}void CTestDlg::OnBnClickedButton1(){ bInLoop=TRUE; unsigned long x=0; while(bInLoop) { x++; if (x==4294967295) x = 0; CString cs; cs.Format(_T("%d"),x); //加入此句是因为采用DoEvents后,用户可能不点击结束按键,而点击关闭窗口, //加入此句用于自动结束循环 if (!IsWindow(m_hWnd)) break; editA.SetWindowText(cs); DoEvents();//检查是否线程是否有别的消息,有,则处理之 };}void CTestDlg::OnBnClickedButton2(){ bInLoop=FALSE;}
本文没有处理重入的情况,使用本方案,一般在OnBnClickedButton1()中,需要是Button1禁止点击
- 在单线程应用中,由用户结束大循环的方案
- yield在大循环中需要注意的一个情况
- 【VB.NET2010】自旋在单线程上的应用
- 由单页应用引出的胡言乱语
- 嵌入式应用的单芯片USB方案
- 单页应用的数据流方案探索
- 在外部结束线程
- 由单页面web应用引发的企业应用问题
- windows中结束线程的方式
- Java中如何优雅的结束线程
- 在android应用中嵌入广告的方案
- AdMob:在android应用中嵌入广告的方案
- Android-在android应用中嵌入广告的方案
- 在android应用中嵌入广告的方案
- AdMob:在android应用中嵌入广告的方案
- 用户态线程在AI中的应用
- 用户态线程在AI中的应用
- 在你的服务器端代码中使用线程和创建异步处理(结束)
- 机器学习-3 logisitic 回归
- ios7新特性--17
- subprocess的输入输出处理
- lightoj 1214 大数除法
- C++ 数组和指针
- 在单线程应用中,由用户结束大循环的方案
- ios7新特性--18
- Android内存泄漏
- oracle查询结果中wmsys.wm_concat组合一列多行结果,以及每行中某些列的组合结果
- php学习之数组(2)直接键创建数组以及list each的用法
- ios7新特性--19
- Hibernate优化(四) 之缓存机制详解
- 回文数
- CODE 120: Container With Most Water