c++的thread类(c++线程简单用法)

本文介绍了一种在C++中实现线程的优雅方法,通过继承Thread类并重写run()函数,使得线程可以直接访问类的私有成员变量,避免了传统方法中将对象指针作为参数传递给线程函数的繁琐。

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

最近看了一个Thread类(忘记在哪里看的了),感觉不错。
创建线程时线程对应的函数必须是类的静态成员,由于静态成员无法访问类的非静态成员,我从前都是把对象的指针作为参数传递给线程函数来避免这个问题,但是在逻辑上线程函数还需要访问对象的私有成员,总是感觉代码很不优雅。这个Thread类同java中的Thread类在用法上比较类似,使用一种比较优雅的方法避免了上面的问题。使用时只要从Thread派生一个子类并实现线程运行的函数 void run() 就可以了。还是看代码吧:

先把使用方法贴上来:

C++语言Codee#880
01  #include<iostream>
02 
03  #include "Thread.h"
04 
05  class  MyThreadClass :  public  Thread
06  {
07      private :
08          int  a;
09      public :
10          MyThreadClass)
             {
11              a  =  0;
12          }
13          ~ MyThreadClass (){ }
15          virtual  void  run();
16  };
17 
18  void  Receiver :: run ()
    {
19      a ++;
20      std :: cout << a << std :: endl;
21  }
22 
23  int  main( int  argc ,  char  *  argv [])
24  {
25      MyThreadClass    myThread;
26      myThread . start(); //创建了一个线程,运行函数run()
27      myThread . join(); //等待线程结束
28      return  0;
29  }

下面是Thread类的实现,为了阅读清晰,删减了很多内容

C++语言: Thread.h
01  #ifndef COMMUNITCATE_H
02  #define COMMUNITCATE_H
03 
04 
05 
06  #include "pthread.h"
07 
08 
09  class  Thread
10  {
11  protected :
12      pthread_t  _tid;
13      static  void *  run0( void *  opt);
14      void *  run1(); // 如果类中有保存线程状态的变量,可以 在这个函数中可以进行更改操作
15  public :
16      Thread();
17      ~ Thread();
18      /** 
19       * 创建线程,线程函数是 run0 
20       * 
21       * @return 成功返回 ture 否则返回 false
22       */
23      bool  start();
24      /** 
25       * join this thread
26       * 
27       */
28      void  join();
29      virtual  void  run (){
30         
31      }
32  };
33 
34 
35  #endif



C++语言: Thread.cpp
01  #include "Thread.h"
02 
03  Thread :: Thread (){
04     
05  }
06 
07  Thread ::~ Thread (){
08     
09  }
10 
11 
12 
13  void *  Thread :: run0( void *  opt)
14  {
15      Thread * p  = ( Thread *opt;
16     p -> run1();
17      return p;
18  }
19 
20  void *  Thread :: run1()
21  {
22      _tid  =  pthread_self();
23      run();
24      _tid  =  0;
25      pthread_exit( NULL);
26  }
27 
28  bool  Thread :: start()
29  {
30      return  pthread_create( & _tid ,  NULL ,  run0 ,  this==  0;
31  }
32 
33  void  Thread :: join()
34  {
35      if_tid  >  0  ){
36          pthread_join( _tid ,  NULL);
37      }
38  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值