创建一个对话框,添加三个编辑框,如下图所示:
对话框头文件代码 ThreadTestDlg.h :
#pragma once
#include "AFXWIN.H"
#define _32Bit1_ int;
using _32Bit2_ = int;
typedef int _32Bit3_;
class ThreadTestDlg : public CDialogEx
{
DECLARE_DYNAMIC(ThreadTestDlg)
public:
ThreadTestDlg(CWnd* pParent = NULL);
virtual ~ThreadTestDlg();
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ThreadTest };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
_32Bit2_ _value;
CString _sValue;
public:
bool _isLoop;
std::mutex _mtEdit;
CString GetValue();
CWinThread* _pThread1;
CWinThread* _pThread2;
CWinThread* _pThread3;
CEdit _ctrlEdit1;
CEdit _ctrlEdit2;
CEdit _ctrlEdit3;
public:
virtual BOOL OnInitDialog();
virtual BOOL DestroyWindow();
};
对话框源文件代码 ThreadTestDlg.cpp:
#include "stdafx.h"
#include "afxdialogex.h"
#include "ThreadTestDlg.h"
IMPLEMENT_DYNAMIC(ThreadTestDlg, CDialogEx)
ThreadTestDlg::ThreadTestDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(IDD_ThreadTest, pParent)
{
_isLoop = true;
}
ThreadTestDlg::~ThreadTestDlg()
{
}
void ThreadTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, _ctrlEdit1);
DDX_Control(pDX, IDC_EDIT2, _ctrlEdit2);
DDX_Control(pDX, IDC_EDIT3, _ctrlEdit3);
}
BEGIN_MESSAGE_MAP(ThreadTestDlg, CDialogEx)
ON_WM_NCDESTROY()
END_MESSAGE_MAP()
//#define ASWD
#ifdef ASWD
void Func()
{
2018年已到来
}
#endif
CString ThreadTestDlg::GetValue()
{
unique_lock<std::mutex> lck(_mtEdit);
_sValue.Format(_T("%d"), _value++);
lck.unlock();
return _sValue;
}
//==============================线程函数================================//
UINT ThreadFunc1(LPVOID pParam)
{
ThreadTestDlg* pDlg = (ThreadTestDlg*)pParam;
CEdit* pEdit = &pDlg->_ctrlEdit1;
while (pDlg->_isLoop)
{
pEdit->SetWindowText(pDlg->GetValue());
Sleep(10);
}
return 0;
}
UINT ThreadFunc2(LPVOID pParam)
{
ThreadTestDlg* pDlg = (ThreadTestDlg*)pParam;
CEdit* pEdit = &pDlg->_ctrlEdit2;
while (pDlg->_isLoop)
{
pEdit->SetWindowText(pDlg->GetValue());
Sleep(10);
}
return 0;
}
UINT ThreadFunc3(LPVOID pParam)
{
ThreadTestDlg* pDlg = (ThreadTestDlg*)pParam;
CEdit* pEdit = &pDlg->_ctrlEdit3;
while (pDlg->_isLoop)
{
pEdit->SetWindowText(pDlg->GetValue());
Sleep(10);
}
return 0;
}
//==============================消息处理函数================================//
BOOL ThreadTestDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
_value = 0;
_pThread1 = AfxBeginThread(ThreadFunc1, (LPVOID)this);
_pThread2 = AfxBeginThread(ThreadFunc2, (LPVOID)this);
_pThread3 = AfxBeginThread(ThreadFunc3, (LPVOID)this);
//_pThread3 = AfxBeginThread(ThreadFunc3, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
return TRUE;
}
BOOL ThreadTestDlg::DestroyWindow()
{
_isLoop = false;
TerminateThread(_pThread1->m_hThread, NULL);
TerminateThread(_pThread2->m_hThread, NULL);
TerminateThread(_pThread3->m_hThread, NULL);
delete _pThread1;
delete _pThread2;
delete _pThread3;
return CDialogEx::DestroyWindow();
}