将创建线程的API-pthread_create封装成一个线程类

pthread_create使用类中函数指针的… 原有的程序是利用一台PC机的共享内存来实现两个程序间的通讯的,最近要求改了,要设计2台PC间这两个的程序的通讯,想把通讯部分的程序做成类封装起来。其中,由于要有多线程的部分。就是说,可能在一个线程里读,在另一个线程里写。所以得用到类成员函数的函数指针部分。 为了验证可行性,编写了下面的程序: class MyThread { public:   static int num;   st 阅读详情

之前写的多线程都是在主进程中调用线程的API,这里为每一个线程封装成一个类;创建了一个线程对象,也就是创建了一个线程;


MyThread.h

/*************************************************************************
	> File Name: MyThread.h
	> Author: 
	> Mail: 
	> Created Time: 2015年12月14日 星期一 16时23分17秒
 ************************************************************************/

#ifndef _MYTHREAD_H
#define _MYTHREAD_H

#include <iostream>
#include <pthread.h>
#include <string>

using std::string;

class MyThread{
    public:
        MyThread();
        ~MyThread();
        void set_name(string name);
        string get_name();
        pthread_t get_pid();
        void run(void *(*fun)(void *), void *arg);
        void join();
        void do_something();//not use
        friend void * thread_routine(void *arg);//not use
    private:
        pthread_t pid;
        string thread_name;
};

#endif

MyThread.cpp

/*************************************************************************
	> File Name: MyThread.cpp
	> Author: 
	> Mail: 
	> Created Time: 2015年12月14日 星期一 16时31分43秒
 ************************************************************************/

#include "MyThread.h"
using namespace std;

MyThread::MyThread()
{
    
}

MyThread::~MyThread()
{
    pthread_join(pid, NULL);
}

void MyThread::set_name(string name)
{
    thread_name = name;
}

string MyThread::get_name()
{
    return thread_name;
}

pthread_t MyThread::get_pid()
{
    return pid;
}
void MyThread::run(void *(*fun)(void *), void *arg)
{
    pthread_create(&pid, NULL, fun, arg);
}

void MyThread::join()
{
    pthread_join(pid, NULL);
}

/*not use*/
void MyThread::do_something()
{
   cout << "thread id is " << pid << ", name is " << thread_name << endl;
}

/*not use*/
void * thread_routine(void *arg)
{
    MyThread * pthread;
    pthread = static_cast<MyThread *>(arg);
    pthread->do_something();

    return NULL;
}

main.cpp

/*************************************************************************
	> File Name: main.cpp
	> Author: 
	> Mail: 
	> Created Time: 2015年12月14日 星期一 16时13分21秒
 ************************************************************************/

#include <cstdlib>
#include <string.h>
#include "MyThread.h"

using namespace std;

void *thread_fun(void * arg)
{
    cout << "this is thread routine..." <<  endl;

    return NULL;
}


int main(int argc, char *argv[])
{
    int i = 0, num = 0;

    if (argc != 2){
        cout << "input the number of thread object you want to create...." << endl;
        exit(-1);
    }
    
    num = atoi(argv[1]);
    MyThread thread[num];
    
    cout << "I will create " << num << " threads." << endl;
    for (i = 0; i < num; ++i){
        thread[i].set_name("thread");
    }

    for(i = 0; i < num; ++i){
        thread[i].run(thread_fun, NULL);
        cout << thread[i].get_name() << " pid is " << thread[i].get_pid() <<  " is running.." << endl;
    } 

    for(i = 0; i < num; ++i){
        thread[i].join();
    } 
    
    cout << "main thread exit....." << endl;

    exit(0);
}



linux中的线程局部存储(TLS)实现线程间的同步和互斥pthread_key_create、pthread_setspecific、pthread_getspecific 由于线程局部存储是基于操作系统的特性,因此它可能会受到操作系统实现的影响。不同的操作系统可能会有不同的线程局部存储实现和限制。 阅读详情

相关推荐

Linux 多线程 Pthread 互斥量

阅读了《Unix/Linux系统编程》中关于Pthread的内容,并查阅相关资料,进行了总结 本文介绍了Pthread多线程基本操作与互斥量基本操作 1. POSIX和Pthread线程概念 1.1 POSIX: POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准。 一般情况下,应用程序通过应用编程接口(API)而不是直接通过系统调用来编程(即并不需要和内核

Nick_Di的博客 807

C++的类中使用pthread_create()

POSIX 标准下,创建线程的pthread_create函数原型是: int pthread_create(pthread_t *thread, pthread_attr_t *attr, void*(*start_routine)(void *), void *arg) 在 C 中,,只要定义一个参数和返回值均为 void * 类型的函数,使用函数名字作为参数即可。就算不完全符

子曰:好娃得是不抄作业? 2341

手把手教你理解瑞萨RH850芯片的HSM:从硬件隔离到软件中断通信

本文深入解析瑞萨RH850芯片的HSM架构,从硬件隔离到软件中断通信的完整实现。通过详细讲解HSM的硬件组件、启动流程、核间通信机制及安全服务实现,帮助开发者掌握芯片级安全技术,提升汽车电子和工业控制领域的安全防护能力。

weixin_33925615的博客 378

关于C++类中成员函数传入pthread_create的问题以及相关函数参数的理解

pthread_create在C++中调用类内成员函数时需要注意 只能调用静态成员函数。

Heck_Jacke的博客 3036

Haclon案例-找出图中面积最大的圆

自带的函数,求得圆的面积和圆心点坐标,然后,用本章所学习的选择算子和循环算子找出面积最大的圆。的图片,试着给它加上不同种类的噪声,然后找出其中面积最大的圆,并将圆的面积标注在其圆心位置。可知,除了六个圆形之外,还有一些微小的噪声点,采用了开运算和特征选择的方法去除噪声。1. 该图片为一灰度图,对其进行二值化,二值化后如图。4. 在面积最大圆的圆心坐标位置写上该圆的面积。

qq_20660115的博客 896

知识图谱中的 Ontology(本体论)

本文的部分图片和内容来自中国科学院自动化研究所刘康老师的课件 Ontology(本体论) Ontology 是(特定领域)信息组织的一种形式,是领域知识规范的抽象和描述,是表达、共享、重用知识的方法。 Ontology 是知识体系构建的关键技术,知识图谱是一种人工智能技术,它的关键在于让计算机能够处理人类的知识。然而,人类脑海中的知识通常是直觉性的,我们无法将这种直觉性的知识直接输入给计算机,On...

P01son的博客 2万+

C++ 面向对象技术实战:实现基于 POSIX 线程标准的线程封装并解决生产者消费者问题

如上图所示,所谓的生产者和消费者都是一个线程,生产者与消费者之间需要进行交互,生产者生产数据往缓冲区内放,生产一个放一个,消费者则会从仓库里面拿数据,此时这个缓冲区就是一个共享资源。生产者与消费者在进行对缓冲区的访问时,为了使得线程同步所以需要获得锁才可以,获得了锁的线程才能进行访问,访问完之后再释放掉锁等其它线程竞争获取。那为什么还需要条件变量呢?来看这么个情况,如果消费者竞争到了锁,然后进入了缓冲区,但此时缓冲区内并没有数据(这是一个没有意义的操作),是不是就造成了锁资源的浪费?

qq_53324833的博客 1122

《UDS/OBD诊断需求编辑工具》总目录

目录 1 基于CANdela Studio编辑CDD诊断描述文件 2 基于ODX Studio编辑ODX/PDX文件 2.1 编辑ODX-D诊断描述文件 2.2 编辑ODX-F刷写软件 该专栏主要负责介绍CANdela Studio和ODX Studio编辑CDD/ODX/PDX诊断描述文件。 1 基于CANdela Studio编辑CDD诊断描述文件 2 基于ODX Studio编辑ODX/PDX文件 【ODX介绍 】-1- 标准梳理 【ODX介绍】 -2-如何手..

「汽车电子助手」的博客 1万+

pthread_create 函数引发的几点思考

pthread_create 函数引发的几点思考 1、 syscall(SYS_gettid) 与pthread_self的区别: 一个是系统调用(LWP),一个是POSIX定义的内容(pthread),两者并不一样,其中gettid常在core文件中看到。两者的值并不一样 2、 堆与栈的区别 堆是要自己申请并释放的,系统会回收(对于C++而言,对应于new和d...

weixin_30390075的博客 151

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 328

移动端 AI 部署:ONNX Runtime + Android 从模型到 App

移动端 ONNX 部署的流程是 PC 端导出 ONNX → 放到 Android 项目 assets → ONNX Runtime AAR 加载推理。核心是OrtSession,预处理在 Java 层用 Bitmap 操作完成。建议先在 PC 上用 onnxruntime Python 验证模型正确,再集成到 Android 端,可以减少定位问题的时间。ONNX Runtime 自动调用 NNAPI,在主流芯片上不需要额外适配。

know_F0727的博客 71

C语言用pthread.h创建线程

C语言的线程库pthread.h的APIpthread.h的示例 C语言的线程库 在Linux系统上,可使用pthread.h创建线程。比如pthread_create()。 pthread.h符合POSIX标准,适用于类Unix、Linux系统。也有兼容Windows的版本——pthreads-w32。 编译时要链接pthread库,比如:gcc test.c -o test -l pt...

LeoHsiao的博客 1万+

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 343

linux下的线程创建相关API函数(pthread _create、pthread _join、pthread _detach、pthread _concel、pthread _kill)

linux下的线程创建以及线程通讯相关API函数线程创建相关API函数pthread _create(创建线程函数)1. 头文件2. 函数原型3. 参数说明4. 返回值:5. 举例说明:6、传递不同参数pthread_join()1. 含义2. 背景3. 函数原型4. 第二个参数说明5. 终止状态(线程返回值)6、回收子线程的返回值pthread_detach()1、背景2、函数原型3、返回值4、detached状态 线程创建相关API函数 pthread _create(创建线程函数) 1. 头文件 #

JMW1407的博客 3013

Apollo Control——超详细入门教程(六):MPC二次规划问题转化

专栏文章列表 Apollo Control——超详细入门教程(一):基于道路误差的车辆动力学模型 Apollo Control——超详细入门教程(二):连续状态空间方程离散化与离散LQR公式推导 Apollo Control——超详细入门教程(三):基于Frenet坐标系及XY坐标系的多项式轨迹生成 Apollo Control——超详细入门教程(四):控制模块轨迹误差计算 Apollo Control——超详细入门教程(五):油门刹车标定表之双线性插值算法 ...

凉了鸭的博客 2233

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【linux系统编程学习笔记】第八节:线程初认识(pthread_create 线程创建、pthread_join  线程回收、pthread_exit  线程退出)

线程初认识 线程的基本概念 线程特点及API pthread_create 线程创建 pthread_join 线程回收 pthread_exit 线程退出 例程: 线程的基本概念 线程实际上是应用层的概念,一个进程内部的多条线程共享了大部分资源,但是还是有一些信息是各自独立的一一比如其运行状态,当一个线程处于睡眠的时候,另一条线程可以正在运行,而或许有些线程已经变成僵尸了!就像一个人是如果是多线程的,他就可以做到一边睡觉一边吃饭一边在洗澡!正是利用线程状态独立的特征,程...

qq_44796935的博客 1943

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux线程:创建(pthread_create),等待(pthread_join),退出(pthread_exit)

pthread_t *thread:线程ID,由函数pthread_self()获取,类似获取进程pid使用getpid()函数;const pthread_attr_t *attr:用于定制各种不同的线程属性,暂可以把它设置为NULL,以创建默认属性的线程;void *(*start_routine) (void *):线程中执行函数。新创建的线程从start_rtn函数的地址开始运行,该函数只有一个无类型指针参数argvoid *arg:执行函数中中参数。

m0_74985965的博客 9307

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pthread多线程: 创建最简单的线程

学习使用Pthread的原因分析,以及使用Pthread创建最简单的线程。

baiyu33的博客 1194

Linux多线程学习(一)pthread_create

Linux系统下的多线程遵循POSIX线程接口,称为pthread。 #include int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void),  void *restrict arg); Returns: 0 if

笑也有泪的专栏 7612

Linux多线程之pthread_create

Linux系统下的多线程遵循POSIX线程接口,称为pthread。 #include <pthread.h> int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)(void), void *restrict arg); Returns: 0 if OK, error number on failure 下面这个程序中,我们的函数thr_fn.

大隐隐于野 1428

pthread学习笔记(二)--pthread常用API及简单介绍

<br />经过了上篇文档的初步学习,对pthread有了一个简单的感性认识,但是对pthread的认识还是比较少,在这篇文档当中将要主要学习pthread的一些常用的API。<br /> <br />首先是pthread的线程创建API: pthread_create<br />#include<pthread.h> int pthread_create(pthread_t *thread,//要创建的线程 pthread_attr_t

hitrose27的专栏 2449

Linux线程——线程创建与管理常用API总结

在 Linux 下进行线程开发,主要使用 POSIX 提供的pthread库。pthreadAPI 涵盖了线程的整个生命周期管理以及线程间同步与通信等功能。和。其中,线程管理类函数包括(创建线程)、(等待线程结束)、(线程退出)、(分离线程)等,主要负责线程的创建、运行与回收;同步机制类函数如(互斥锁)、(条件变量)等用于协调多个线程对共享资源的安全访问;而线程控制类函数如(线程取消)、(获取线程 ID)、(设置可取消状态)等,则提供了对线程行为的细粒度控制。

weixin_45720999的博客 849

c主线程如何等待子线程结束 linux_linux c之使用pthread_create创建线程pthread_join等待线程和pthread_exit终止线...

1、介绍API1、pthread_create函数函数简介pthread_create是UNIX环境创建线程函数头文件#include函数声明int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);返回值若...

weixin_35645230的博客 1069

pthread_create用法

在转载别人文章之前,说一下pthread_create(); 创建线程返回值。 正常情况下,创建成功则返回 0 ; 如果创建失败 通常返回常见的错误返回代码为: EAGAIN #define EAGAIN 35 // Resource temporarily unavailable 和 EINVAL #define EINVAL 22  //I...

kunkliu的博客 1487

pthread_create线程创建的过程剖析

概述 在Linux环境下,pthread库提供的pthread_create()API函数,用于创建一个线程。线程创建失败时,它可能会返回ENOMEM或EAGAIN。这篇文章主要讨论线程创建过程中碰到的一些问题和解决方法。 创建线程 首先,本文用的实例代码example.c: /* example.c*/ #include  #include  #include 

mutx_lck的专栏 1287

深入浅出 Linux 线程控制:从原生 API 剖析到 C++ 面向对象优雅封装

本文系统性地讲解了 Linux 下的线程控制机制。从轻量级进程(LWP)的核心概念入手,详细剖析了 POSIX 线程库的创建、终止、等待与分离等 API。结合虚拟地址空间布局,揭示了线程 ID 的本质与内存管理逻辑。为了契合现代工程实践,文章通过“静态成员函数+指针强转”巧妙解决了函数签名冲突,手把手实现了一个优雅的 C++ 面向对象线程类。最后,深入探究了 TCB 结构与内核底层的 clone 系统调用,帮助读者完成从应用层 API 到内核原理的全面进阶。

kumaxi的博客 510
上一篇: 多进程编程函数posix_spawn实例
下一篇: 将创建进程的API-posix_spawn封装成一个进程类
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值