我在MFC的对话框初始化函数中启动了一个线程,线程内部代码如下(dlg为线程参数,即当前对话框,g_hMutex为互斥变量,m_thrun为窗体终止标志):for (int i = 0; i < num; i++)
{
    WaitForSingleObject(g_hMutex, INFINITE);
    if (!dlg->m_thrun)
    {
        ReleaseMutex(g_hMutex);
        return 0;
    }
    CString str;
    str.Format(_T("%d"), i + 1);
    m_list->SetItemState(i, LVIS_SELECTED, LVIS_SELECTED);
    m_list->EnsureVisible(i, TRUE);
    m_list->SetItemText(i, 2, _T("正在处理..."));
    Sleep(200); // 关键点
    m_list->SetItemText(i, 2, _T("已处理"));
    m_list->SetItemText(i, 3, _T("临时文件已删除"));
    dlg->GetDlgItem(IDC_EDT_NUM)->SetWindowText(str);
    dlg->m_step.SetPos(i + 1);
    Sleep(200);
    ReleaseMutex(g_hMutex);
}
然后我在oncancel()函数中加入了如下代码:
WaitForSingleObject(g_hMutex, INFINITE);
m_thrun = FALSE;
ReleaseMutex(g_hMutex);
CloseHandle(g_hMutex);
CDialog::OnCancel();
为什么每次在线程执行过程中我点退出程序会卡住不再运行了?那个关键点sleep时间短了就没问题,长了就点一次死一次,求高手赐教