按钮事件一直发消息,怎么退出

按钮事件一直发消息,如何退出?
是这样的,公司软件需要一个功能,点击一个按钮,就会循环检测usb设备,再点一下,就会停止。
我用一个BOOL行成员变量来检测按钮的状态,代码如下:
void CTabPageAuth::OnBnClickedButtonCycleReset()
{
// TODO: Add your control notification handler code here
if (m_bCycledReset == FALSE)
{
SetDlgItemText(IDC_BUTTON_CYCLERESET, _T("停止"));
m_bCycledReset = TRUE;
} AfxEndThread
else
{
SetDlgItemText(IDC_BUTTON_CYCLERESET, _T("循环复位"));
m_bCycledReset = FALSE;
}
try
{
while (m_bCycledReset == TRUE)
{
g_Analyser.DisposeAtrCmd("/atr"); // 与usb相关的处理函数
}
}
catch(std::exception e)
{
// exception handling.
}
}


现在第二次点按钮停下来的时候就会卡死,我觉得是消息循环中有个死循环,第一次调用还没返回,就执行了第二次,所以就卡死了,这个消息函数该怎么写才好呢?

------解决方案--------------------
AfxEndThread 这是什么?
OnBnClickedButtonCycleReset()只负责反转m_bCycledReset,别的不做。
循环部分拿别处去。
------解决方案--------------------
我觉得比较合理的做法是:

用于循环检测usb设备的while()循环放到一个单独的worker thread里面。
在while()循环中WaitFor...一个Event或者信号量。

点击按钮,创建worker thread,线程函数里面的while()循环开始执行。开始检测。
再次点击按钮,将Event设置为有效状态,这样WaitFor...返回WATI_OBJECT_0之后,
就break;,退出循环。结束检测。

点击按钮时,应该创建线程,还是将退出事件设置为有效状态,可以用现在的
成员变量m_bCycledReset来控制。

楼主现在的程序,在UI主线程中搞了一个busy loop,肯定会让界面卡住的。
------解决方案--------------------
你的程序一直都在执行while中的操作啊,从来也没退出过,当然会卡了,搞个线程运行呗,线程里面去检测这个标志
------解决方案--------------------
检测另开线程去检测

通过设置信号量来控制线程退出