MFC:界面多线程

12 篇文章 0 订阅

创建一个对话框,添加三个编辑框,如下图所示:


对话框头文件代码 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();
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宏笋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值