博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC 循环界面假死的解决(MFC 按钮终止循环)
阅读量:7167 次
发布时间:2019-06-29

本文共 1266 字,大约阅读时间需要 4 分钟。

有两种方法:

1. 单线程解决:

OnBtn1()

{
        while(m_bLoop)
       {
                your code....
              // 派发消息
               MSG msg;
               if (PeekMessage(&msg,(HWND)NULL, 0, 0, PM_REMOVE))
               {
                        ::SendMessage(msg.hwnd, msg.message, msg.wParam, msg.lParam);  
                }
       }
}
OnBtn2()
{
       m_bLoop = FALSE;
}

2. 多线程 (参考:)

a. 在xxxDlg.h中类的外面(即大括号外面)定义一个函数 void ThreadFunc();(外部函数)

b. 在xxxDlg类中定义在类CMultiThread1Dlg内部添加protected型变量:

HANDLE hThread; DWORD ThreadID;

     分别代表线程的句柄和ID。 

c. 在xxxDlg.cpp中定义全局变量volatileBOOL m_Flag;

d.在xxxDlg.cpp中写ThreadFunc函数

    void ThreadFunc()

    {

           while(m_Flag)

           {

                    //your code here

            }

           return; //线程自杀

    }

e. 按钮A代表开始循环

 

void CxxxDlg::OnStart()

 

{

         hThread=CreateThread(

               NULL,

0, (LPTHREAD_START_ROUTINE)ThreadFunc, NULL, 0,

&ThreadID

);

}

f. 按钮B代表结束循环

 

void CxxxDlg::OnStop() { m_bRun=FALSE;}

 

其他解决方法:

方法<1> :

把开始按钮中的那些循环部分单独写成一个子线程,在按钮的处理函数中产生子线程,主线程就不会因为循环而阻塞消息了.

#7楼 回复于:2007-05-09 18:15:50
看一下有关线程的东西就ok啦,无非就是把循环放在另外开辟的子线程中,你那样是在主线程中运行,所以造成界面假死现象,因为主线程被阻塞而忙于处理你的循环,所以就顾不上响应你的其他操作了
#8楼 回复于:2007-05-09 18:24:12
do   while循环中,加入这句sleep(10).
死循环放线程中,这样UI线程不会阻塞,界面就不会假死了
死循环中可以不断的PostMessage等发送消息给UI线程,来更新界面,如进度条等都是这么个流程

 
冬去春来回复于06日13点48分 
//可以将以下代码放到循环中,就可以处理消息了,但最好还是使用线程:
while (PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))       
{           
    TranslateMessage(&msg);           
    DispatchMessage(&msg);       
}
SLEEP是暂停了当前你主线程,会暂停消息响应,所以出现假死状态,可以抛出另一个线程,再到那个线程里面sleep,这样主线程就不会被暂停了

 

转载地址:http://rfmwm.baihongyu.com/

你可能感兴趣的文章
windows下使用crt远程连接virtualbox里面的linux
查看>>
banner滑动juqery特效 带自动切换
查看>>
Intellij IDEA GIT 分支合并冲突
查看>>
Android中Paint字体的使用
查看>>
vsftpd开启日志记录上传、下载、删除,分析xferlog日志
查看>>
Ruby On Rails 路由配置简述
查看>>
TurboMail邮件系统工程师重要提醒:谨防邮件钓鲸诈骗
查看>>
Maven创建web项目:SpringMVC+Mybatis
查看>>
最佳的75个安全工具
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
ios开发学习-弹出视图(Popup View) 效果源码分享--系列教程1
查看>>
过年回去做了些什么。!?
查看>>
我的友情链接
查看>>
JAVAEE项目结构以及并发随想
查看>>
iOS开发之生成图片水印
查看>>
PJSIP 网络视频,电话
查看>>
详解spring 每个jar的作用
查看>>
关于云的日记
查看>>
linux安装
查看>>