最近看了一个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 }

c++的thread类(c++线程简单用法)相关推荐

  1. 详解Java多线程编程中LockSupport类的线程阻塞用法

    转载自  详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际 ...

  2. 【转】线程、Thread类和线程终止

    一.线程Thread启动 0. Thread类实现了java.lang.Runnable接口,即实现了run方法.虽然在Sun JDK中,start()调用了start0()方法,start0()方法 ...

  3. 继承Thread类实现多线程简单实例

    继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...

  4. 多线程—Thread类及线程三种创建方式及对比

    线程创建的3种方法: 1.继承Thread类并重写run方法 Thread类方法: Thread Thread.currentThread() :获得当前线程的引用.获得当前线程后对其进行操作. Th ...

  5. PYTHON——多线程:Thread类与线程函数

    Thread类与线程函数 可以使用Thread对象的join方法等待线程执行完毕:主线程(main()函数)中调用Thread对象的join方法,并且Thread对象的线程函数没有执行完毕,主线程会处 ...

  6. Thread类创建线程

    目录 1.在java中执行多线程编辑 1.1通过Thread类创建线程 1.2创建线程方法2 1.3创建线程方法3 1.4创建线程方法4 1.5创建线程方法5 2.多线程执行效率 2.1两个变量同时自 ...

  7. 继承Thread类创建线程类

    一 点睛 通过继承Thread类创建线程并启动多线程的步骤: 1 定义Thread的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务.因此run()方法称为线程执行体 ...

  8. java 创建线程thread_初学Java多线程:用Thread类创建线程

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程, ...

  9. 线程的应用-继承Thread类创建线程

    Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例.启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法是一个native方法,它会启动一个 ...

最新文章

  1. 人工智能模型数据泄露的攻击与防御研究综述
  2. 版本发布后软件测试人员要做的工作
  3. goland 设置project gopath
  4. h3c怎么创建虚拟服务器,h3c 设置虚拟服务器
  5. Eclipse中怎样安装数据库建模工具ERMaster插件
  6. android通过webservice连接SQL数据库(二)客户端
  7. 敲代码4年,发现C语言里几个有意思的问题
  8. 鸽子 迷信_人工智能如何帮助我战胜鸽子
  9. vscode 英伟达tk1_英伟达的未来,不只是GPU
  10. 最好用的免费文件夹加密工具-《深度文件夹锁》
  11. flex:1代表什么
  12. ANR问题分析实例 logcat anr trace
  13. google talk
  14. office显示“你的许可证并非正版....”
  15. Django Channels 个人对官方文档大概理解 及一些地方的作用
  16. 解决unity调用WebCam显示的拉伸
  17. 怎样关闭任务栏的Microsoft资讯
  18. Excel数据透视表经典教程七《刷新及更改数据源》
  19. 计算机网络性能常见参数,计算机网络参数及其对网络性能的影响
  20. Linux下磁盘常见错误分析与检测工具使用

热门文章

  1. $(“#addLowForm“).serialize()同时提交其它参数的写法
  2. vscode 编辑器快捷键
  3. 201706问题记录
  4. 和菜鸟一起学linux之bluez学习记录2
  5. OpenDDS通讯rtps_discovery对等发现模式的pub和sub匹配的日志
  6. Java5线程并发库之LOCK(锁)CONDITION(条件)实现线程同步通信
  7. webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)
  8. form表单元素设置只读
  9. 一个女程序员的创业人生:胆识也是一种能力 作者:秋镇菜
  10. 【计算机网络】wireshark数据流追踪、图像抓取(转)