多线程封装

news/2025/11/2 20:48:21/文章来源:https://www.cnblogs.com/xdhking/p/19185407
//Thread.hpp
#pragma once
#include<iostream>
#include<string>
#include<cstring>
#include<functional>
#include<unistd.h>
#include<cassert>
#include<pthread.h>
class Thread;
//上下文
class Context{
public:Thread *this_;void *args_;
public:Context():this_(nullptr),args_(nullptr){}~Context(){}
};
class Thread{//using func_t = std::function<void*(void*)>;typedef std::function<void*(void*)> func_t;const int num=1024;
public:Thread(func_t func,void *args,int number):func_(func),args_(args){char buffer[num];snprintf(buffer,sizeof buffer,"thread-%d",number);name_=buffer; }//在类内创建线程,想让线程执行对应的方法,需要将方法设置为staticstatic void *start_routine(void *args){//类内成员,有缺省参数//静态方法不能调用非静态成员方法或者成员变量// return func_(args_);Context *ctx=static_cast<Context*>(args);void *ret=ctx->this_->run(ctx->args_);delete ctx;return ret;}void start(){Context *ctx=new Context();ctx->this_=this;ctx->args_=args_;int n=pthread_create(&tid_,nullptr,start_routine,ctx);assert(n==0);(void)n;}void join(){int n=pthread_join(tid_,nullptr);assert(n==0);(void)n;}void *run(void *args){return func_(args);}~Thread(){//do nothing}
private:std::string name_;func_t func_;void *args_;pthread_t tid_;
};

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

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

相关文章

使用 GeckoCircuits 设计 Buck 电源环路

使用 GeckoCircuits 设计 Buck 电源环路使用 GeckoCircuits 设计 Buck 电源环路 笔者最近发现一款开源的电力电子仿真软件 GeckoCircuits,它是由苏黎世联邦理工学院(ETH)开发的,具有极高的仿真速度,软件小巧,功能…

第k小的数的分治算法

include using namespace std; int x=100; int rr(int b[],int left,int right) { int m=left,n=right+1; int h=b[left]; while(1) { while(b[++m]<h&&m<right); while(b[--n]>h); if(m>=n) { br…

Day29-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\reflect

单元测试 Junit单元测试框架package Basic.src.com.Junit;public class StringUtil {public static void printNumber(String name) {if (name == null) {System.out.println(0);return;//停掉方法}System.out.println…

k8s-Pod中的网络通信(3)

部署的pod都会涉及到和内外网络通信,我们部署的pod 有一个ip,这个IP 是集群内部的IP ,只能在集群内被访问,k8s中pod的网路通信是交给service来管理的,简称svc。负责将外部流量引入,和内部流量引出。 1.外部流量访…

一个灵感:思维的断章

一个灵感:思维的断章 它来时,没有预兆。 不是在逻辑的链条上规行矩步,也不是在记忆的仓库里按图索骥。它诞生于一片更为辽阔、更为混沌的模糊空间。 那片空间,是意识的背景辐射,是思想形成之前的星云。那里,概念…

第十届中国大学生程序设计竞赛 哈尔滨站(CCPC 2024 Harbin Site)

第十届中国大学生程序设计竞赛 哈尔滨站(CCPC 2024 Harbin Site)比赛链接 Review 因为下周就要“一起哈啤”,所以这周末来 VP 去年的“一起哈啤”,然而已经一个多月没写代码了! 开题顺序依旧,看了个 J 感觉还挺可…

CSP-S 回顾

开考后发现自己穿了一个绒秋裤,考场上要被热死了,不断通过喝水降低体温。 $1min$ 第一题一下想到$DP和反悔贪心$,还好学了(汗) $1min 1s$否决掉了$DP$ $20min$ 奶龙考试时遇到了一些问题: 优先队列pair<int,p…

https://heylink.me/tizihacks/

https://heylink.me/tizihacks/https://heylink.me/tizihacks/

2025CSP-J游记

今年是最后一次打J组了,考的还可以。 上考场了,心想必将 J组 \(AK\),我带着信心又有点慌进考场了。 先看 \(T_1\) \(T_1\) 我感觉隔壁同学(好像是华辰的)语文挺好,看题好快,迅速开打。 \(应该是“最难的题”了吧…

通达信:引用函数 - Leone

DRAWNULL 无效数返回无效数。用法: DRAWNULL例如: IF(CLOSE>REF(CLOSE,1),CLOSE,DRAWNULL)表示下跌时不画线。 BACKSET 向前赋值用法: BACKSET(X,N),若X非0,则将当前位置到N周期前的数值设为1. 例如: BACKSET(CLO…

项目架构

聊天机器人项目架构

CSP总结

DAY-1 机房里萦绕着一种特有的氛围,我复习了 \(wiki\) 上的数学与 \(DP\) 章节(但并没有用到)。 DAY1 8点到校,或许是前一天没睡好的缘故,在车上就想睡觉,于是在原本几乎全车人都很活跃的时间段里没有什么参与。…

AI泡沫再思考:技术革命与投资狂潮的真相

本文探讨了当前AI领域的投资泡沫现象与技术发展前景,分析了AGI实现时间表、就业市场影响以及初创企业生存率等关键问题,指出技术突破与市场震荡并存的复杂性。重新审视AI泡沫 | Daniel Miessler 为什么重大崩盘、AGI…

[群表示论]基本概念

取基础域为 \(\mathbb k\). 令 \(G\) 是一个群,同态 \(\rho\colon\ G\longrightarrow GL(V)\) 给出 \(G\) 的表示 \((V,\rho)\),其中 \(V\) 是线性空间. 我们称 \(V\) 是 \(G-\)模. 令 \(V\) 是 \(G-\)模,\(W\) 是 …

P14362 [CSP-S 2025] 道路修复

题目大意 给定 \(n\) 个点,\(m\) 条边的无向图且有边权,有 \(k\) 个额外点,每个额外点向这 \(n\) 个点连边,且额外点有点权,求最小生成树。 \(n\leq 1e4\),\(m\leq 1e6\),\(k\leq 10\)。 Sol 从考场思路改了一点…

10.30总结

1.早点休息了明天去泰山

基于 Maxwell 实现 MySQL 数据实时迁移到 Mongodb

在 DB 运维层而非应用层实现需求,以降低应用层的业务侵入性及性能影响。 maxwell 是一款 ETL 工具,基本原理是 实时解析 MySQL 的 binlog 丢到相应的 MQ 中供具体业务逻辑去消费。 比如最典型的一种大数据日志路径:…

CSP2025-S 坠机记

CSP2025-S 坠机记 省流:未能完成 AK 的心愿。初赛随便考的,94 分。 复赛依然是在七高,成功在 14:20 抵达教室,发现我所在的机房电脑性能要烂一些,然而键盘要好一些,应该是好事。位置是靠窗,比较好,开考前准备写…

世界计划:无法歌唱的初音未来

标题是骗你点进来的。 Day 0 上午爽爽玩神秘构造小游戏,连砍到 C 不知道多少。 然后写了点 AGC 题,感觉都很水啊,自己强爆了。 中午回去刷本,fgo 真特么好玩。 下午进考场,发现自己的座位附近散布了一堆熟人,但貌…