Linux线程库封装

一 MyThread.hpp

#pragma once
#include<pthread.h>
#include<iostream>
#include<unistd.h>
#include<string>
#include<ctime>

typedef void (*callback_t)();
static int num = 1;
//任务和线程绑定
class Thread
{
    static void* Routine(void *args)
    {
        Thread* ptr = static_cast<Thread*>(args);
        ptr->Entry();
        return nullptr;
    }
public:
    Thread(callback_t cb)
    :cb_(cb),tname_(""),start_time_stamp_(0),isrunning_(false)
    {}
    ~Thread()
    {}
    void Run()
    {
        tname_ = "thread-" + std::to_string(num);
        start_time_stamp_ = time(nullptr);
        isrunning_ = true;
        pthread_create(&tid_,nullptr,Routine,this);
    }
    void Join()
    {
        pthread_join(tid_,nullptr);
        isrunning_ = false;
    }
    void Entry()
    {
        cb_();
    }
    bool Isrunning()
    {
        return isrunning_;
    }
    std::string Name()
    {
        return tname_;
    }
    uint64_t StartTimeStamp()
    {
        return start_time_stamp_;
    }
private:
    pthread_t tid_;
    std::string tname_;
    callback_t cb_;//回调函数
    uint64_t start_time_stamp_;
    bool isrunning_;


};

二 测试

#include "MyThread.hpp"
#include <vector>
void task()
{
    while (1)
    {
        std::cout << "I am a task" << std::endl;
        sleep(1);
    }
}

int main()
{
    std::vector<Thread> threads;
    for (int i = 0; i < 10; ++i)
    {
        threads.push_back(Thread(task));
    }
    for (auto &t : threads)
    {
        t.Run();
    }
    for (auto &t : threads)
    {
        t.Join();
    }
}
// int main()
// {
//     Thread t1(task);
//     std::cout << "name:" << t1.Name() << " time:" << t1.StartTimeStamp()
//               << " isrun??  " << t1.Isrunning() << std::endl;
//     t1.Run();
//     std::cout << "name:" << t1.Name() << " time:" << t1.StartTimeStamp()
//               << " isrun??  " << t1.Isrunning() << std::endl;
//     t1.Join();
// }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/374176.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决hive表新增的字段查询为空null问题

Hive分区表新增字段&#xff0c;查询时数据为NULL的解决方案 由于业务拓展&#xff0c;需要往hive分区表新增新的字段&#xff0c;hive版本为2点多。 于是利用 alter table table_name add columns (col_name string )新增字段&#xff0c;然后向已存在分区中插入数据&#x…

MySQL学习记录——사 表结构的操作

文章目录 1、创建表2、查看表结构3、改变表结构4、删除表5、总结 1、创建表 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 例子 create table users ( id int, name varchar(20) c…

Linux Shell系列--realpath 返回给定路径的规范化绝对路径名

一、目的 在linux系统中有绝对路径、相对路径&#xff0c;还有符号链接&#xff0c;我们在shell脚本中获取一个文件或者路径的绝对路径名称&#xff0c;这个时候就需要realpath命令。 本篇主要介绍realpath命令的相关内容。 二、介绍 realpath命令主要功能是解析给定的路径&am…

游戏服务器租用多少钱一年?看完再买不吃亏!

2024年更新腾讯云游戏联机服务器配置价格表&#xff0c;可用于搭建幻兽帕鲁、雾锁王国等游戏服务器&#xff0c;游戏服务器配置可选4核16G12M、8核32G22M、4核32G10M、16核64G35M、4核16G14M等配置&#xff0c;可以选择轻量应用服务器和云服务器CVM内存型MA3或标准型SA2实例&am…

GC垃圾回收

文章目录 GC垃圾回收一、垃圾回收概述1、什么是垃圾&#xff1f;2、什么是垃圾回收&#xff1f;3、为什么需要垃圾回收&#xff1f;4、Java垃圾回收机制5、Java垃圾回收区域 二、对象存活判断1、引用计数算法&#xff08;Python&#xff09;1&#xff09;基本思路2&#xff09;…

C语言——联合体类型

&#x1f4dd;前言&#xff1a; 在前面两篇文章&#xff1a;C语言——结构体类型&#xff08;一&#xff09;和C语言——结构体&#xff08;二&#xff09;中&#xff0c;我们讲述了C语言中重要的数据类型之一&#xff1a;结构体类型&#xff0c;今天我们来介绍一下C语言中的另…

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境&#xff0c;一是翻译环境&#xff0c;二是运行环境&#xff0c;计算机能识别的是二进制的指令&#xff0c;人写完代码后通过翻译环境&#xff0c;使代码变成计算机能读懂的可执行的机器指令&a…

Mac上软件闪退(意外退出)的解决方法

mac苹果电脑上运行软件会意外退出&#xff0c;怎么办&#xff0c;可以试试下面的方法&#xff0c;亲测可行&#xff01; 第一种方法&#xff1a; 1、打开访达&#xff0c;进入应用程序目录&#xff0c;找到闪退的软件图标&#xff0c;在软件图标上右键选择“显示简介”&#…

华为OD机试真题C卷-篇3

文章目录 查找一个有向网络的头节点和尾节点幼儿园篮球游戏 查找一个有向网络的头节点和尾节点 在一个有向图中&#xff0c;有向边用两个整数表示&#xff0c;第一个整数表示起始节点&#xff0c;第二个整数表示终止节点&#xff1b;图中只有一个头节点&#xff0c;一个或者多…

配备Apple T2 安全芯片的 Mac 机型及T2芯片mac电脑U盘装系统教程

T2 芯片为 Mac 提供了一系列功能&#xff0c;例如加密储存和安全启动功能、增强的图像信号处理功能&#xff0c;以及适用于触控 ID 数据的安全保护功能。哪些电脑配备了 T2 安全芯片呢&#xff0c;T2芯片mac电脑又如何重装系统呢&#xff1f;跟随小编一起来看看吧&#xff01; …

Dell服务器iDRAC9忘记密码, 通过RACADM工具不重启 重置密码

系列文章目录 文章目录 系列文章目录前言一、RACADM工具二、linux环境1.解压安装RACADM工具测试RACADM工具重置iDRAC密码 Windows环境 前言 一、RACADM工具 RACADM工具 官网参考信息 https://www.dell.com/support/kbdoc/zh-cn/000126703/%E5%A6%82%E4%BD%95-%E9%87%8D%E7%BD…

跟着cherno手搓游戏引擎【21】shaderLibrary(shader管理类)

前置&#xff1a; ytpch.h&#xff1a; #pragma once #include<iostream> #include<memory> #include<utility> #include<algorithm> #include<functional> #include<string> #include<vector> #include<unordered_map> #in…

天线阵列车载应用——第1章 介绍 1.1节 汽车工业中的天线阵列:应用和频率范围

1.1 汽车工业中的天线阵列:应用和频率范围 无线通信系统的发展需要新的技术来支持更高质量的通信、新的服务和应用。近年来&#xff0c;汽车无线通信市场得到了极大的扩展。现代汽车使用不同的服务:AM/FM收音机、卫星广播(SDARS)、移动电话通信、数字音频广播(DAB)、远程无钥匙…

Mac电脑上好用的设计绘图软件都有哪些,这6款一定不要错过!

Mac上好用的设计绘图软件有Sketch、Adobe XD、Principle、Illustrator和Affinity Designer、AutoCAD等。这些软件都具有操作简便、功能强大、上手容易等特点&#xff0c;能够满足设计师的各种需求。 Affinity Designer Affinity Designer是一款专业的矢量图形设计软件&#x…

LeetCode-第2469题=温度转换

1.题目描述 给你一个四舍五入到两位小数的非负浮点数 celsius 来表示温度&#xff0c;以 摄氏度&#xff08;Celsius&#xff09;为单位。 你需要将摄氏度转换为 开氏度&#xff08;Kelvin&#xff09;和 华氏度&#xff08;Fahrenheit&#xff09;&#xff0c;并以数组 ans …

GaussDB HCS 轻量化部署软件下载指引

一、Support 账号准备 1. 账号说明 华为的软件服务在华为support网站发布&#xff0c;注册该账号后&#xff0c;可以申请软件、下载离线文档&#xff0c;查看技术案例等功能 2. 账号注册 步骤 1&#xff1a;点击如下官方链接 华为运营商技术支持 - 华为 步骤 2&#xff1…

位置内插 PI:基于Positional Interpolation扩大模型的上下文窗口

位置内插 PI&#xff1a;基于Positional Interpolation扩大模型的上下文窗口 如何在不牺牲性能或从头训练的情况下&#xff0c;扩展大型语言模型的上下文窗口以处理长文档或长对话&#xff1f; 论文&#xff1a;https://arxiv.org/pdf/2306.15595.pdf 这篇论文介绍了一种名为位…

fiddler 的用法

fiddler 的用法 .使用fiddler进行抓包 . 使用fiddler进行抓包 举例一些常见的代理工具 1.wireshark:功能非常强大,但是使用起来更复杂一些 2.fiddler:功能虽然比wireshark少,但是使用简单方便,功能也足以应付大部分场景了 安装了fiddler之后,http和https的请求和响应都会被抓包…

OpenGL实现光源位置指示

案例需求&#xff1a; 在三维超声显示中&#xff0c;需要一个光源指示功能来示意光源是从什么方向照向胎儿的&#xff0c;从而帮助用户去理解当前胎儿三维显示的效果。如下图 基于以上需求需要实现以下几点功能&#xff1a; 1. 构造球体模型和光源模型&#xff1b; 2. 绕球体…

【多模态MLLMs+图像编辑】MGIE:苹果开源基于指令和大语言模型的图片编辑神器(24.02.03开源)

项目主页&#xff1a;https://mllm-ie.github.io/ 论文 :基于指令和多模态大语言模型图片编辑 2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models &#xff08;加州大学圣巴拉分校苹果&#xff09; 代码&#xff1a;https://github.com/appl…