c++的thread类(c++线程简单用法)
最近看了一个Thread类(忘记在哪里看的了),感觉不错。
创建线程时线程对应的函数必须是类的静态成员,由于静态成员无法访问类的非静态成员,我从前都是把对象的指针作为参数传递给线程函数来避免这个问题,但是在逻辑上线程函数还需要访问对象的私有成员,总是感觉代码很不优雅。这个Thread类同java中的Thread类在用法上比较类似,使用一种比较优雅的方法避免了上面的问题。使用时只要从Thread派生一个子类并实现线程运行的函数 void run() 就可以了。还是看代码吧:
先把使用方法贴上来:
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类的实现,为了阅读清晰,删减了很多内容
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
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++线程简单用法)相关推荐
- 详解Java多线程编程中LockSupport类的线程阻塞用法
转载自 详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际 ...
- 【转】线程、Thread类和线程终止
一.线程Thread启动 0. Thread类实现了java.lang.Runnable接口,即实现了run方法.虽然在Sun JDK中,start()调用了start0()方法,start0()方法 ...
- 继承Thread类实现多线程简单实例
继承Thread类实现多线程简单实例 文章目录 继承Thread类实现多线程简单实例 一.多线程的意义 二.多线程的创建 三.代码 一.多线程的意义 1.为什么要使用多线程 (a)提高用户体验或者避免 ...
- 多线程—Thread类及线程三种创建方式及对比
线程创建的3种方法: 1.继承Thread类并重写run方法 Thread类方法: Thread Thread.currentThread() :获得当前线程的引用.获得当前线程后对其进行操作. Th ...
- PYTHON——多线程:Thread类与线程函数
Thread类与线程函数 可以使用Thread对象的join方法等待线程执行完毕:主线程(main()函数)中调用Thread对象的join方法,并且Thread对象的线程函数没有执行完毕,主线程会处 ...
- Thread类创建线程
目录 1.在java中执行多线程编辑 1.1通过Thread类创建线程 1.2创建线程方法2 1.3创建线程方法3 1.4创建线程方法4 1.5创建线程方法5 2.多线程执行效率 2.1两个变量同时自 ...
- 继承Thread类创建线程类
一 点睛 通过继承Thread类创建线程并启动多线程的步骤: 1 定义Thread的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务.因此run()方法称为线程执行体 ...
- java 创建线程thread_初学Java多线程:用Thread类创建线程
在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程, ...
- 线程的应用-继承Thread类创建线程
Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例.启动线程的唯一方法就是通过Thread类的start()实例方法.start()方法是一个native方法,它会启动一个 ...
最新文章
- 人工智能模型数据泄露的攻击与防御研究综述
- 版本发布后软件测试人员要做的工作
- goland 设置project gopath
- h3c怎么创建虚拟服务器,h3c 设置虚拟服务器
- Eclipse中怎样安装数据库建模工具ERMaster插件
- android通过webservice连接SQL数据库(二)客户端
- 敲代码4年,发现C语言里几个有意思的问题
- 鸽子 迷信_人工智能如何帮助我战胜鸽子
- vscode 英伟达tk1_英伟达的未来,不只是GPU
- 最好用的免费文件夹加密工具-《深度文件夹锁》
- flex:1代表什么
- ANR问题分析实例 logcat anr trace
- google talk
- office显示“你的许可证并非正版....”
- Django Channels 个人对官方文档大概理解 及一些地方的作用
- 解决unity调用WebCam显示的拉伸
- 怎样关闭任务栏的Microsoft资讯
- Excel数据透视表经典教程七《刷新及更改数据源》
- 计算机网络性能常见参数,计算机网络参数及其对网络性能的影响
- Linux下磁盘常见错误分析与检测工具使用
热门文章
- $(“#addLowForm“).serialize()同时提交其它参数的写法
- vscode 编辑器快捷键
- 201706问题记录
- 和菜鸟一起学linux之bluez学习记录2
- OpenDDS通讯rtps_discovery对等发现模式的pub和sub匹配的日志
- Java5线程并发库之LOCK(锁)CONDITION(条件)实现线程同步通信
- webpack v3 结合 react-router v4 做 dynamic import — 按需加载(懒加载)
- form表单元素设置只读
- 一个女程序员的创业人生:胆识也是一种能力 作者:秋镇菜
- 【计算机网络】wireshark数据流追踪、图像抓取(转)