新开线程问题
关于新开线程及关闭问题,按一下按钮新开线程,再按一下关闭该线程.
void CSmart_RemoterDlg::OnBnClickedButton2()
{
//新建线程
if(!m_bRun)
{
hThread = CreateThread(NULL,
0, (LPTHREAD_START_ROUTINE)ThreadFunc,
this,
0,
&ThreadID);
if(hThread)
{
m_bRun = true;
}
else
{
m_bRun = false;
if(WaitForSingleObject(hThread,500) == WAIT_TIMEOUT)
TerminateThread(hThread,0);
CloseHandle(hThread);
hThread = NULL;
}
}
UINT ThreadFunc(LPVOID lpParam)
{
CSmart_RemoterDlg* pthis = (CSmart_RemoterDlg*)lpParam;
while(m_bRun)
{
while((m_bRun == true) && (!MyProject.MyRemoter.UsbReadFile((char*)&Rec[i*USB_PACK_SIZE],USB_PACK_SIZE)) && (delay <= 150))
{
delay++;
}
if(!m_bRun) //如果是外部中断该任务或本次学习超时则退出
break;
pthis->GetDlgItem(IDC_STATIC_DEBUG)->SetWindowText(_T("学习失败!"));
}
return 0;
}
我在关闭新线程是设置线程退出标志m_bRun延迟500mS后如果还没有退出则强制退出,我发现只要不在线程中pthis->对控件操作,就可以在在500ms内退出,而只要一加上线程中操作控件就会被卡在那里退不出来,用无限延迟也退不出来。 请问这是怎么回事情?
}