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();
// }

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京东首页移动端-web实战

设置视口标签以及引入初始化样式 <link rel"stylesheet" href"./css/normalize.css"><link rel"stylesheet" href"./css/index.css"> body常用初始化样式 body {width: 100%;min-width: 320px;max-width: 640px;margin:…

leetcode1079:游戏玩法分析——求留存率

求留存率 题目描述题解 题目描述 表&#xff1a;Activity --------------------- | Column Name | Type | --------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | --------------------- &#xff08;player_id&…

H2数据库

1.介绍 Java H2 是一个用 Java 编写的轻量级、开源的关系型数据库。它以其体积小、性能高、易于使用而闻名&#xff0c;常被用于开发和测试环境中&#xff0c;也适用于特定的生产环境。H2 数据库支持内存存储模式&#xff0c;这意味着数据可以直接存储在内存中&#xff0c;从而…

存内计算架构在通用视觉模型上的潜力应用

近年来&#xff0c;人工智能领域的通用视觉模型在自动驾驶、医疗图像分析、机器人视觉系统等场景中发挥了越来越重要的作用&#xff0c;它们通过模拟人类的视觉处理机制&#xff0c;有效地识别、理解和分析图像和视频数据。同时&#xff0c;新兴的存内计算架构显著优化了现有通…

SQLite database实现加密

注意&#xff1a;以下操作以VS2022为开发工具&#xff0c;以C#为开发语言。 数据加密原因 软件在使用的各个场景&#xff0c;很多都需要数据具有保密性&#xff0c;于是对于数据库就需要加密。特别是在某些特定领域或存储敏感数据尤其如此。 SQLite加密实现 SQLite加密有两种…

Arduino 串口绘图仪简单使用

1、工具所在位置 串口绘图仪实际上是从预设的串口获取值并将其绘制在xy轴图每获取到一组数据向左滑动一个单位&#xff0c;读取数据的速度起快&#xff0c;滑动就越快。 Y轴代表来自串口的值&#xff0c;可以是单个也可以是一组 。在读取串口数据时遇到"\n"&#xf…

Windows下Node.js下载安装及环境变量配置教程

Windows下Node.js下载安装及环境变量配置教程 安装版本&#xff1a;node-v18.19.0-x64.msi 文章目录 Windows下Node.js下载安装及环境变量配置教程一、Node.js和NPM简介二、下载地址三、安装步骤四、环境配置五、安装淘宝镜像总结 一、Node.js和NPM简介 1、Node.js &#xf…

Java设计模式大全:23种常见的设计模式详解(一)

本系列文章简介&#xff1a; 设计模式是在软件开发过程中&#xff0c;经过实践和总结得到的一套解决特定问题的可复用的模板。它是一种在特定情境中经过验证的经验和技巧的集合&#xff0c;可以帮助开发人员设计出高效、可维护、可扩展和可复用的软件系统。设计模式提供了一种在…

Java 学习和实践笔记(1)

2024年&#xff0c;决定好好学习计算机语言Java. B站上选了这个课程&#xff1a;【整整300集】浙大大佬160小时讲完的Java教程&#xff08;学习路线Java笔记&#xff09;零基础&#xff0c;就从今天开始学吧。 在这些语言中&#xff0c;C语言是最基础的语言&#xff0c;绝大多…

SQL 表信息 | 统计 | 脚本

介绍 统计多个 SQL Server 实例上多个数据库的表大小、最后修改时间和行数&#xff0c;可以使用以下的 SQL 查询来获取这些信息。 脚本 示例脚本&#xff1a; DECLARE Query NVARCHAR(MAX)-- 创建一个临时表用于存储结果 CREATE TABLE #TableSizes (DatabaseName NVARCHAR…

ResizeObserver的使用

这篇说下ResizeObserver API。ResizeObserver接口监视 Element 内容盒或边框盒或者 SVGElement 边界尺寸的变化。 ResizeObserver避免了通过回调函数调整大小时&#xff0c;通常创建的无限回调循环和循环依赖项。它只能通过在后续的帧中处理 DOM 中更深层次的元素来做到这一点…

CGAL-3D 凸包算法

3D 凸包算法 一、概述二、静态凸包构造1. Traits 特征类2. 极端点3. 半空间相交4. 凸性检验 三、动态凸包构造四、性能 一、概述 一个点集 S∈R3 是凸的&#xff0c;如果对于任意两点 p 和 q 在集合中&#xff0c;具有端点的线段 p 和 q 包含在 S。集合的凸包 P 包含点集 S 的最…