MFC想循环执行某个程序,但是程序运行后就一直未响应

时间:2023-01-18 23:42:37
   想实现这样的功能:
             隔一段时间便去运行一个程序,代码如下:
           
void CEXEtimerDlg::OnOK() 
{
// TODO: Add extra validation herep;
while (1)
{
ShellExecute(this->m_hWnd,"open",m_path,"","",SW_SHOW );
Sleep(10000);
if (m)
{
return;
}
}

//CDialog::OnOK();
}
这个是确定按钮的消息处理函数,我想通过一个死循环来让他一直重复执行某个程序,知道m的值变为1,m的由取消按钮确定,如果按下,则m的值变为1,可是程序执行后,在执行第二次循环后就一直未响应,这个是怎么回事?

3 个解决方案

#1


这个应该是用定时器的,而不是用Sleep。

#2


这个是确定按钮的消息处理函数,我想通过一个死循环来让他一直重复执行某个程序,知道m的值变为1,m的由取消按钮确定,如果按下,则m的值变为1,可是程序执行后,在执行第二次循环后就一直未响应,这个是怎么回事?
=========
这个想法从根本上就是错误的,当while循环在执行时,你根本没有办法点击取消按钮,你上面的程序是单线程的,当上面的函数在执行的时候,你的程序根本无法响应外部的消息。

#3


用线程1运行那个循环代码。
在对话框点击取消后,发送消息给线程,线程获得消息后退出循环!

#1


这个应该是用定时器的,而不是用Sleep。

#2


这个是确定按钮的消息处理函数,我想通过一个死循环来让他一直重复执行某个程序,知道m的值变为1,m的由取消按钮确定,如果按下,则m的值变为1,可是程序执行后,在执行第二次循环后就一直未响应,这个是怎么回事?
=========
这个想法从根本上就是错误的,当while循环在执行时,你根本没有办法点击取消按钮,你上面的程序是单线程的,当上面的函数在执行的时候,你的程序根本无法响应外部的消息。

#3


用线程1运行那个循环代码。
在对话框点击取消后,发送消息给线程,线程获得消息后退出循环!