MFC:界面多线程
2018-01-02 13:56
363 查看
创建一个对话框,添加三个编辑框,如下图所示:
对话框头文件代码 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:
对话框头文件代码 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(); }
相关文章推荐
- MFC界面包装类(多线程时成员函数调用的断言失败)
- MFC界面包装类-多线程时成员函数调用的断言失败
- MFC多线程之用户界面线程
- MFC界面包装类(多线程时成员函数调用的断言失败)
- mfc界面包装类 ——多线程时成员函数调用的断言失败
- MFC界面包装类 ——多线程时成员函数调用
- MFC界面包装类(多线程时成员函数调用的断言失败)
- 摘录:MFC界面包装类(多线程时成员函数调用的断言失败)
- 深入浅出Win32多线程设计之MFC的多线程(2)
- MFC UI按钮多线程
- UIWidget是所有UI组件的抽象基类,作为基类当然定义了必须的成员变量和函数,接触过MFC或其他UI组件开发,想必都知道有一堆参数设置,尤其是Visual Studio的可视化界面,
- MFC多线程编程注意事项
- MFC 多线程及线程同步
- MFC多线程的创建,包括工作线程和用户界面线程
- MFC框架界面开发(一):视图和框架
- MFC界面编程1:GDI+实现不规则窗体
- MFC多线程
- MFC 开发界面增加控件提示 的方法
- MFC Ribbon界面各部分的名字
- 深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)