vc 创建线程

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

    // 定时清空显示
    static DWORD WINAPI ThreadProcClear(LPVOID lpParameter);
    void CreateTreadClear();
    void ReleaseThreadClear();
    void ThreadClearRun();
    HANDLE m_hThreadClear;
    HANDLE m_hEventThreadClear;
    bool m_bThreadClearExit;

// 初始化
   HANDLE m_hThreadClear;
    HANDLE m_hEventThreadClear;
    bool m_bThreadClearExit;


// 定时清空显示
DWORD WINAPI CRnsClientDlg::ThreadProcClear(LPVOID lpParameter)
{
    CClientDlg* pDlg = (CClientDlg*)lpParameter;
    pDlg->ThreadClearRun();
    return 0;
}
void CClientDlg::CreateTreadClear()
{
    m_bThreadClearExit = false;
    m_hEventThreadClear = CreateEvent(NULL, TRUE, FALSE, NULL);
    DWORD dwThreadID;
    m_hThreadClear = ::CreateThread(
        NULL, 0, CClientDlg::ThreadProcClear,
        this, 0, &dwThreadID);
}
void CClientDlg::ReleaseThreadClear()
{
    m_bThreadClearExit = true;
    SetEvent(m_hEventThreadClear);
    WaitForSingleObject(m_hThreadClear, 1000);
    CloseHandle(m_hEventThreadClear);
    m_hEventThreadClear = 0;
}
void CClientDlg::ThreadClearRun()
{
    while(1)
    {
        WaitForSingleObject(m_hEventThreadClear, INFINITE);
        if(m_bThreadClearExit)
        {
            return;
        }
        Sleep(5000);
        if(m_nStatu == 0)
        {
            OnBnClickedClear();
        }
        if(m_bThreadClearExit)
        {
            ret

对上面的代码封装成类来使用

// 头文件 HYThread.h

#pragma once
#include <Windows.h>

#define DECLARE_THREADFUN(className, ThreadFunName) \
	DWORD ThreadFunName(); \
	static DWORD WINAPI ThreadFunName##Thread(LPVOID lpParameter) \
	{ \
		return ((className*)lpParameter)->ThreadFunName(); \
	} \


class CHYThread
{
public:
	CHYThread();
	~CHYThread();
	
	// 参数:	LPTHREAD_START_ROUTINE lpStartAddress 线程函数
	//			LPVOID lpParameter 线程函数参数
	void CreateThread(LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter);
	void ReleaseThread();

	volatile bool m_bThreadExit;
	HANDLE m_hThread;
	HANDLE m_hEvent;
    DWORD m_dwThreadID;
};

// 实现文件

#include "stdafx.h"
#include "HYThread.h"


CHYThread::CHYThread()
: m_bThreadExit(true)
, m_hThread(0)
, m_hEvent(0)
, m_dwThreadID(0)
{}

CHYThread::~CHYThread()
{
	ReleaseThread();
}

void CHYThread::CreateThread(LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter)
{
	m_bThreadExit = false;
	m_hEvent = ::CreateEvent(0, false, false, 0);
    m_hThread = ::CreateThread(NULL, 0, lpStartAddress, lpParameter, 0, &m_dwThreadID);
}

void CHYThread::ReleaseThread()
{
	m_bThreadExit = true;
    ::SetEvent(m_hEvent);
    ::WaitForSingleObject(m_hThread, INFINITE);
    ::CloseHandle(m_hEvent);
    ::CloseHandle(m_hThread);
	m_hEvent = 0;
    m_hThread = 0;
}

// 调用

#include "HYThread.h"

class Test
{
public:
	Test();

	DECLARE_THREADFUN(Test, TestJust);
};

Test::Test()
{

}

DWORD Test::TestJust()
{
	printf("Test\n");
	return 0;
}


Test test;
// 声明线程对象
CHYThread hyThread;
// 创建线程, 传递线程函数地址和线程函数参数
hyThread.CreateThread(Test::TestJustThread, &test);	

// 在Test类中, 使用了DECLARE_THREADFUN来声明一个Test类的静态函数, 静态函数中调用Test类的TestJust函数.
// 我们也可以自己写线程函数, 不使用宏.





vc++创建一个线程的方法: 提供一套在VC++开发中需要使用到的创建线程和终止线程方法。 立即下载

相关推荐

VC++创建一个线程thread

VC++创建一个新线程

VC创建线程

作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。 在VC中,无非是创建线程和写线程函数 一、常规方法:纯使用Platform SDKAPI. 1, 创建线程: #include 在MFC中通常在OnInitDialog()下面创建线程 /

phenixyf的专栏 1026

VC++学习之线程

VC++中,常规的创建线程方式有四种: 1. 使用CreateThreadAPI提供的CreateThread函数; 2. 使用C++语言提供的_beginthreadex函数; 3. 在MFC程序中使用AfxBeginThread函数; 4. 使用MFC类库中CWinThread类创建线程。   使用1,2种方法,创建线程会返回一个线程句柄HANDLE。对于线程句柄的理解中,有一

sd396791336的专栏 1183

VC线程编程之线程创建与示例

一、问题的提出 编写一个耗时的单线程程序:   新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下: void CSingleThreadDlg::OnSleepSixSecond() { ...

weixin_34245169的博客 367

C++创建线程的三种方式

早期的C++并不支持多线程创建,如果要创建线程,依赖的是系统提供的一些方法(例如linux的 pthread). 从C++11以后开始,提供了std::thread线程库,因此我们可以创建std::thread类对象的方式来创建线程

RedCrabe的博客 5387

C++线程学习1,线程创建的多种方式

thread的生命周期和线程的等待和分离

Ckuanfeng的博客 2624

VC中如何创建多个线程

VC中如何创建多个线程在工作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。在VC中,无非是创建线程和写线程函数1,  创建线程:#include 在MFC中通常在OnInitDialog()下面创建线程//定义参数:SerialControl//------

kenny9931的专栏 2061

VC 创建线程

VC创建线程   作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。 在VC中,无非是创建线程和写线程函数 一、常规方法:纯使用Platform SDKAPI. 1, 创建线程: #include 在MFC中通常在OnInitDi

rheostat的专栏 606

vc创建一个线程的方法

vc创建一个线程的方法: vc创建一个线程的方法: 创建线程使用CreateThread The CreateThread function creates a thread to execute within the address space of the calling process.    HANDLE CreateThread( LPSECURITY_ATTRIBU

msbbc的专栏 687

vc创建一个线程的方法:

vc创建一个线程的方法: 创建线程使用CreateThread The CreateThread function creates a thread to execute within the address space of the calling process.    HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttrib...

weixin_34161029的博客 297

VC创建多个线程的方法

作中我们经常会遇到要建立多个线程,以此方便于我们可以同时执行多个事件。这也是我们在VC开发中的一项基础,虽然我曾多次用到,但也会常常忘记。这次记下来,作为一个笔记,为大家学习提供方便。 在VC中,无非是创建线程和写线程函数 一、常规方法:纯使用Platform SDKAPI.1,创建线程: #include<windows.h> 在MFC中通常在OnInitDialog()下面创...

weixin_30840573的博客 115

vc 创建线程的方法

转载自:http://blog.sina.com.cn/s/blog_62cf7e7d0100xpdd.html CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 转自:http://www.cnblogs.com/chuncn/archive/2009/03/08/1406096.ht

fengfeiwanqian的专栏 983
上一篇: 手机号码段说明
下一篇: std::string 使用
小大小丑
博客等级 码龄18年 483粉丝 425原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值