根据safmq线程类,模仿编写的线程基类

本文介绍如何基于已有的线程类定义新的线程类,通过重写run()函数来实现特定任务的执行,并展示了具体使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在分析safmq线程类时,觉得很好用,就模仿着写了一个。

类的定义如下:

.h文件内容如下

01 #pragma once
02 #include <windows.h>
03 /****************************************************************
04 * 文件名:Thread.h
05 * 功能:线程类定义,提供线程基类
06 * 作者:
07 * 时间:2012-2-18
08 *****************************************************************/
09 class Thread
10 {
11     public:
12         Thread(void);
13         ~Thread(void);
14  
15         void start();           //线程启动     
16         void stop();            //线程关闭
17  
18     protected:
19         virtual void* run() = 0;        //线程运行
20         friend unsigned long _stdcall  _thd_start(void*param); //友元函数
21  
22     private:
23         HANDLE _thread;         //线程句柄
24         bool m_bStop;           //线程是否需要停止
25         unsigned long m_threadId;   //线程ID
26  
27                  
28 };

.cpp文件格式如下

01 #include "StdAfx.h"
02 #include "Thread.h"
03  
04  
05 /*
06  *函数名:_thd_start
07  *功能:线程入口函数
08  *参数:param Thread的this指针
09  */
10 unsigned long _stdcall _thd_start(void* param)  //线程函数的定义有固定的规则
11 {
12     return (long)((Thread*)param)->run();
13 }
14  
15  
16 Thread::Thread(void)
17 {
18         m_bStop = false;
19         m_threadId = 0;
20 }
21  
22  
23 Thread::~Thread(void)
24 {
25         stop();
26 }
27  
28 void Thread::start()
29 {
30     _thread = ::CreateThread(NULL, 0, _thd_start, this, 0, &m_threadId);    //线程创建后立即运行
31 }
32  
33  
34 void Thread::stop()
35 {
36     ::CloseHandle(_thread);
37 }

使用方法如下:

01 #include "stdafx.h"
02 #include "Thread.h"
03 #include <iostream>
04  
05 using namespace std;
06  
07 class TestCustomThread : public Thread
08 {
09         protected:
10             void* run();
11 };
12  
13 void* TestCustomThread::run()
14 {
15         for (int i = 0; i < 500; i++)
16         {
17             ::Sleep(200);
18             cout<<i<<"  "<<endl<<flush;
19         }
20  
21         return NULL;
22 }
23  
24 int _tmain(int argc, _TCHAR* argv[])
25 {
26         TestCustomThread customThread;
27  
28         customThread.start();
29  
30          
31         getchar();
32         return 0;
33 }

如果我们想要定义自己的线程类,继承Thread类即可,并重写run()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值