在MFC 子线程中使用UI(控件)退出时死锁或者超时处理参考
(如果有错误请私信指正,谢谢)
// TODO: 在此处添加消息处理程序代码}
// Test1Dlg.h : 头文件
//
#pragma once
// CTest1Dlg 对话框
class CTest1Dlg : public CDialog
{
// 构造
public:
CTest1Dlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_TEST1_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
HANDLE m_hExit;
CWinThread *m_pWinThread1;
CWinThread *m_pWinThread2;
public:
void ShowDlgControls();
void DoEvents();
//延时函数
void Delay(DWORD dwMs);
public:
afx_msg void OnDestroy();
};
// Test1Dlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Test1.h"
#include "Test1Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
UINT ThreadFun1(LPVOID lpParam)
{
if (lpParam == NULL)
{
return 0;
}
CTest1Dlg *pTest1Dlg = (CTest1Dlg*)lpParam;
while (TRUE)
{
if(WAIT_OBJECT_0 == WaitForSingleObject(pTest1Dlg->m_hExit,0))
{
OutputDebugString(_T("ThreadFun1线程退出\r\n"));
TRACE(_T("ThreadFun1线程退出\r\n"));
//中文会报_CrtDbgReport: String too long or IO Error 解决办法