【无标题】进程池/Linux

#include <iostream>
#include <vector>
#include <unistd.h>
#include <cassert>
#include <sys/types.h>
#include <string>
#include <sys/wait.h>
// using namespace std;
#include "Tash.hpp"
class channel//封装文件下标fd
{
public:channel(int cd, pid_t id) : ctrlfd(cd), workid(id){}public:int ctrlfd;pid_t workid;std::string name;
};
void work()//工作函数
{while (true){int code = 0;ssize_t n = read(0, &code, sizeof code);//取出任务码if (n == 4){if (!init.Checkcode(code)){continue;}init.Runtask(code);//运行}else if (n == 0){break;}else{}}std::cout << "chird quit" << std::endl;
}
void creat(std::vector<channel> *c)
{std::vector<int> old;//存储主进程已经打开的pipe文件for (size_t i = 0; i < 5; i++){int pipefd[2] = {0};//使用匿名管道完成通信int n = pipe(pipefd);assert(n == 0);(void)n;std::cout<<"creat"<<std::endl;int id = fork();assert(id != -1);if (id == 0){if (!old.empty())//子进程关闭主进程已经打开的pipe文件{for (const auto fd : old){close(fd);}}close(pipefd[1]);dup2(pipefd[0], 0);work();exit(0);}close(pipefd[0]);c->push_back(channel(pipefd[1], id));old.push_back(pipefd[1]);}
}
void sendCommand(std::vector<channel> c, int flag, int num=0)
{int pos = 0;while (true){int command = init.SelectTask();const auto &tem = c[pos++];pos %= c.size();std::cout << "send command " << init.Todesc(command) << "[" << command << "]"<< " in "<< tem.name << " worker is : " << tem.workid << std::endl;write(tem.ctrlfd, &command, sizeof command);//将任务写进对应的pipe文件if (!flag)//判断是否一直使用{num--;if (num == 0)break;}sleep(1);}std::cout<<"SendCommand done..." <<std::endl;
}
void Releasechannel(std::vector<channel>c)
{for( auto i: c){close(i.ctrlfd);waitpid(i.workid,nullptr,0);}
}
int main()
{std::vector<channel> channels;creat(&channels);const bool g_always_loop = true;sendCommand(channels, g_always_loop);//sendCommand(channels, !g_always_loop, 10);Releasechannel(channels);return 0;
}

任务类

#pragma once#include <iostream>
#include <unistd.h>
#include <functional>
#include <vector>
#include <ctime>
typedef std::function<void()> task;
void Download()
{std::cout << "我是一个下载任务"<< " 处理者: " << getpid() << std::endl;
}void PrintLog()
{std::cout << "我是一个打印日志的任务"<< " 处理者: " << getpid() << std::endl;
}void PushVideoStream()
{std::cout << "这是一个推送视频流的任务"<< " 处理者: " << getpid() << std::endl;
}
class Init
{public:const static int g_download_code=0;const static int g_print_log_code=1;const static int g_push_video_stream_code=2;std::vector<task>tasks;public:Init(){tasks.push_back(Download);tasks.push_back(PrintLog);tasks.push_back(PushVideoStream);srand(time(nullptr)^getpid());}bool Checkcode(int code){if(code>=0&&code<tasks.size()){return true;}else{return false;}}void Runtask(int code){return tasks[code]();}int SelectTask(){return rand()%tasks.size();}std::string Todesc(int code){switch (code){case g_download_code :return "Download";case g_print_log_code :return "PrintLog";case g_push_video_stream_code :return "PushVideoStream";default:return "Unknow";}}
};
Init init;

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

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

相关文章

三分钟快速上手SpringSecurity框架

导入依赖框架 web 框架(spring-boot-starter-web) <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> springSecurity 框架(spring-boot-starter-security) <de…

递归-常规问题详解

目录 前言 递归经典题目 子集 77. 组合 46. 全排列 前言 递归在计算机算法中有很重要的地位&#xff0c;它可以解决条件具有重复性的问题。我们在快速排序和归并排序&#xff0c;都是利用了递归去解决问题的。写好一个递归代码不是太容易&#xff0c;很容易造成死循环最终…

基于单片机的空气质量检测系统设计(51+4G版)-设计说明书

设计摘要&#xff1a; 本设计是基于单片机的空气质量检测系统设计涉及以下主要功能&#xff0c;旨在监测甲烷和一氧化碳的浓度&#xff0c;并在浓度过高时采取相应措施&#xff0c;以确保室内空气质量的安全。该系统使用传感器对甲烷和一氧化碳的浓度进行检测。传感器将收集到…

人物介绍模板 PSD 源文件免费获取

免费获取 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 下载链接在最后&#xff01; 链接&#xff1a;https://pan.baidu.com/s/1sq3e6djMdZt76Sh_uqVxWg 提取码&#xff1a;naun

AniPortrait详细讲解以及完整搭建流程(有问题留言)

AniPortrait是一款真实感人像动画的音频驱动合成的AI程序。 下面是它的github源码: GitHub - Zejun-Yang/AniPortrait: AniPortrait: Audio-Driven Synthesis of Photorealistic Portrait AnimationAniPortrait: Audio-Driven Synthesis of Photorealistic Portrait Animati…

TiDB学习1:TiDB体系架构概览

目录 1. TiDB体系结构 2. TiDBsever 3. TiKV 4. PD(Placement Driver) 5. TiFlash 1. TiDB体系结构 水平扩容或者缩容金融级高可用实时 HTAP云原生的分布式数据库兼容MySQ 5.7 协议 2. TiDBsever 处理客户端的连接SQL语句的解析和编译关系型数据与 kv 的转化(insert语句)S…

线上3D博物馆搭建简单吗?有何优势?有哪些应用场景?

随着科技的飞速发展&#xff0c;传统的博物馆参观方式正在经历一场前所未有的变革&#xff0c;在科技的“加持”下&#xff0c;不少博物馆凭借强大的技术、创意和美学实践&#xff0c;频频“出圈”&#xff0c;线上3D博物馆逐渐崛起&#xff0c;这不仅丰富了人们的文化体验&…

Mirror从入门到入神(二)

文章目录 SpawnSpawnObject NetworkIdentityAwakeInitializeNetworkBehavioursValidateComponents NetworkBehaviourNetworkServerSpawnObjectOnStartServerRebuildObserversRebuildObserversDefaultAddAllReadyServerConnectionsToObservers NetworkIdentityAddObserver Netwo…

C++|多态性与虚函数(1)功能绑定|向上转换类型|虚函数

目录 什么是多态性&#xff1f; 概念 分类 向上类型转换 功能的早绑定和晚绑定 绑定 绑定与多态的联系 编译时多态&#xff08;功能的早绑定&#xff09; 运行时多态&#xff08;功能的晚绑定&#xff09; 一般而言 实现功能晚绑定——虚函数 虚函数定义的说明 什么…

springboot jar包下config logback外配置文件不生效

描述 与jar 包同级的config目录下放置配置文件 检查1 确定配置配置文件名称为logback-spring.xml 检查2 确定logback-spring.xml 内容正确 检查3 开发环境为 生产环境&#xff08;外配置环境下&#xff09;

催产素(Oxytocin ) ELISA检测试剂盒

催产素(Oxytocin )是一种神经生理肽&#xff0c;在下丘脑室旁核产生并储存在垂体后部。该分子由9个氨基酸组成&#xff0c;用一个[1-6]二硫键和一个半灵活的羧基酰胺化尾巴连接。催产素是一种曾经被认为仅限于女性平滑肌生殖生理的激素&#xff0c;目前的研究结果已经确定&…

寻求发展+兼顾陪读|企业高管赴美国乔治梅森大学做访问学者

E经理拟去美国访学&#xff0c;想达到3个目的&#xff1a;结合本专业方向&#xff0c;扩展至跨学科研究领域&#xff1b;考察市场&#xff0c;寻求新的发展契机&#xff1b;携孩子出国读书&#xff0c;兼顾陪读&#xff0c;并希望尽早出国。最终我们为其落实的乔治梅森大学访问…

会员网站如何创建具有不同仪表盘结构的用户帐户页面

用户帐户页面是中央用户仪表盘&#xff0c;用户可以在其中添加和编辑信息、发布和编辑帖子以及保存收藏夹项目。本教程介绍如何使用“内容”和“重写”模板模式设置帐户页面、为帐户页面创建子页面以及设置个人资料菜单等。 在本教程中&#xff0c;我们将介绍如何使用招聘网站…

PSAI超强插件来袭:一键提升设计效率!

无需魔法&#xff0c;直接在PS中完成图生图、局部重绘、线稿上色、无损放大、扩图等操作。无论你是Windows还是Mac用户&#xff0c;都能轻松驾驭这款强大的AI绘图工具&#xff0c;这款PSAI插件让你的设计工作直接起飞&#xff01; 在之前的分享中&#xff0c;我为大家推荐过两…

Wiley数据库文献哪里比较全?去哪里下载比较高效

Wiley出版社1807年创建于美国&#xff0c;是一家具有超过200年历史的全球知名的出版机构&#xff0c;面向专业人士、科研人员、教育工作者、学生、终身学习者提供必需的知识和服务。 Wiley及旗下的子品牌出版了超过500位诺贝尔奖得主的作品。Wiley Online Library为全学科期刊全…

从0开始搭建一个react项目 第一 二 三天

从0开始搭建一个react项目 今天接到一个任务让我把原来用ext.js写的前端换成react写的&#xff0c;我好慌的&#xff0c;因为我就是一个小白&#xff0c;之前只做过简单的二次开发功能。唉&#xff0c;我只是一个领着微薄薪水的小实习生&#xff0c;为什么要有这个任务&#x…

价格战开卷!字节发布豆包大模型,比行业便宜99.3%

豆包大模型正式亮相 5月15日&#xff0c;在2024春季火山引擎Force原动力大会上&#xff0c;字节跳动自研豆包大模型正式亮相。 &#xff08;图源&#xff1a;证券时报&#xff09; 火山引擎是字节跳动旗下云服务平台&#xff0c;据火山引擎总裁谭待介绍&#xff0c;豆包大模型…

海外媒体发稿:如何在日本媒体投放新闻通稿-大舍传媒

导言 在全球化的时代背景下&#xff0c;海外媒体宣发对于企业来说非常重要。通过在海外媒体投放新闻通稿&#xff0c;企业能够拓展海外市场&#xff0c;增强知名度和影响力。本文将探讨如何在海外媒体投放新闻通稿&#xff0c;以帮助企业进行有效的海外宣传。 挖掘海外媒体资…

Dubbo2.x迁移3.x过程及原理

Dubbo2.x迁移3.x过程及原理 1.Dubbo2.x迁移3.x1.1 快速升级步骤1.2 Provider 端升级过程详解1.2.1 双注册带来的资源消耗 1.3 Consumer 端升级过程1.3.1 APPLICATION_FIRST策略1.3.2 双订阅带来的资源消耗1.3.3 消费端更细粒度的控制 1.4 迁移状态的收敛1.4.1 不同的升级策略影…

project日历共享

项目A的进度计划在project中通过“更改工作时间”&#xff0c;在“日历”中手动添加了公共假日和调休假日&#xff0c;想在项目B的project进度中共用手动更改后的日历&#xff0c;操作方法&#xff1a; (1)在项目A的project计划中依次点击&#xff1a;文件 - 信息 - 管理器&am…