首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

如何退出循环

2012-01-19 
怎么退出循环?界面上有2个按钮,一个叫循环,按下后程序进入死循环,另一个按钮叫退出,按下后先前的死循环应

怎么退出循环?
界面上有2个按钮,   一个叫循环,按下后程序进入死循环,另一个按钮叫退出,按下后先前的死循环应当退出,怎么编写这两个事件程序?

[解决办法]
用线程比较好
[解决办法]
点击 "循环 "按钮时,生成一个线程来处理.点击 "退出 "按钮时,给循环线程发一个停止信号
[解决办法]
多线程,否则程序会一直停留在循环中而无法处理退出按钮的消息。
[解决办法]
是啊,多线程是关键
[解决办法]
写个最简单线程例子,希望对你有帮助:

头文件中声明线程函数.
这里假设xxxRDlg为对话框类
xxxRDlg.h
static DWORD WINAPI AccountThreadProc(LPVOID lpParameter); //必须声明为静态的线程函数.当然如果是全局的则没这个必要
bool CreateAccountThreadProc(void);//建立计算线程
bool DestroyAccount(void); //强制结束线程函数
HANDLE m_hAccountThread; //用于存放
DWORD m_dwAccountThreadId;

bool torf;//标志,是否退出?

xxxRDlg.cpp


这里假设xxxRDlg为对话框类
调用在适当的地方写上:
torf=true;bool boc=CreateAccountThreadProc();//线程创建并马上开始工作.
要退出则只要在退出代码内加入:
torf=false;


bool xxxRDlg::CreateAccountThreadProc(void)
{//建立计算线程
m_hAccountThread=CreateThread(0,0,xxxRDlg::AccountThreadProc,(LPVOID)this ,0,&m_dwAccountThreadId);//工作线程开始工作
if(!m_hAccountThread)
return FALSE; //不成功
else
return TRUE; //成功
}

bool xxxRDlg::DestroyAccount(void)//强制结束线程函数
{
if(m_hAccountThread)
{
BOOL b=FALSE;
DWORD ExitCode;
int Timeout = 50;
while(Timeout)//等待线程结束,如果到一定时间内没结束,就强制结束
{
GetExitCodeThread(m_hAccountThread, &ExitCode);

if (ExitCode != STILL_ACTIVE)
{
b=TRUE;
// Thread has ended.
break;
}
else
{
Sleep(10);
}
--Timeout;
}
if(!b)//time out ,terminate it
TerminateThread(m_hAccountThread,0);
}
m_hAccountThread=NULL;
return TRUE;
}


DWORD WINAPI xxxDlg::AccountThreadProc(LPVOID lpParameter)
{ //计算工作线程]
xxxRDlg* pxxxRDlg=(xxxRDlg*)lpParameter;
//要用这个Dlg的变量或什么的可用这个 "pxxxRDlg-> "得到.
CButton *Account =(CButton*)pCCJRDlg-> GetDlgItem(IDOK);//这里比如IDOK按钮为开始工作
Account-> EnableWindow(0); //按钮无效 ,防止多次启动线程.
while(pCCJRDlg-> torf) //不等于false则一直工作下去.
{
::Sleep(1000); //休1000毫秒,测试效果

}
Account-> EnableWindow(1); //按钮有效
}
[解决办法]
pCCJRDlg都改为你对话框中的pxxxRDlg !!!
因为我的对话框为pCCJRDlg,所以工作线程中有两个地方没改过来.
[解决办法]
dzq138(钟添)果然是个很严谨的人呢.说的很详细,不错.
[解决办法]
多线程
[解决办法]
用windows的消息机制同样可以,NI的采集卡中的采集函数都是死循环,你可以参照它的例子

热点排行