隔一段时间便去运行一个程序,代码如下:
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循环在执行时,你根本没有办法点击取消按钮,你上面的程序是单线程的,当上面的函数在执行的时候,你的程序根本无法响应外部的消息。
=========
这个想法从根本上就是错误的,当while循环在执行时,你根本没有办法点击取消按钮,你上面的程序是单线程的,当上面的函数在执行的时候,你的程序根本无法响应外部的消息。
#3
用线程1运行那个循环代码。
在对话框点击取消后,发送消息给线程,线程获得消息后退出循环!
在对话框点击取消后,发送消息给线程,线程获得消息后退出循环!
#1
这个应该是用定时器的,而不是用Sleep。
#2
这个是确定按钮的消息处理函数,我想通过一个死循环来让他一直重复执行某个程序,知道m的值变为1,m的由取消按钮确定,如果按下,则m的值变为1,可是程序执行后,在执行第二次循环后就一直未响应,这个是怎么回事?
=========
这个想法从根本上就是错误的,当while循环在执行时,你根本没有办法点击取消按钮,你上面的程序是单线程的,当上面的函数在执行的时候,你的程序根本无法响应外部的消息。
=========
这个想法从根本上就是错误的,当while循环在执行时,你根本没有办法点击取消按钮,你上面的程序是单线程的,当上面的函数在执行的时候,你的程序根本无法响应外部的消息。
#3
用线程1运行那个循环代码。
在对话框点击取消后,发送消息给线程,线程获得消息后退出循环!
在对话框点击取消后,发送消息给线程,线程获得消息后退出循环!