c++11实现的多线程管理
发布日期:2021-09-25 21:40:38 浏览次数:7 分类:技术文章

本文共 2084 字,大约阅读时间需要 6 分钟。

c++11的一些特性,有点模糊了,撸个c++11实现的简易线程池玩玩,强化一下记忆。

目录


threadManage.h

#pragma once#include 
#include
#include
#include
#include
#include
using namespace std;class ThreadManage{ typedef std::function < void() > Task;public: ThreadManage(int num); ~ThreadManage();public: void StartThread(); void StopThread(); void AddTask(Task task);private: void Work();private: std::vector
m_threads; std::queue
m_task; std::mutex m_mutex; std::condition_variable m_condtion; volatile bool m_bIsBusy; int m_ThreadNum;};

threadManage.cpp

#include "threadManage.h"ThreadManage::ThreadManage(int num) :m_ThreadNum(num), m_bIsBusy(false){}ThreadManage::~ThreadManage(){	if (m_bIsBusy)		StopThread();}void ThreadManage::StartThread(){	m_bIsBusy = true;	for (int i = 0; i < m_ThreadNum; i++)	{		m_threads.push_back(new std::thread(std::bind(&ThreadManage::Work, this)));		//std::unique_lock
lock(m_mutex); //chrono::microseconds time(1000); //m_condtion.wait_for(lock, time); }}void ThreadManage::StopThread(){ { std::unique_lock
lock(m_mutex); m_bIsBusy = false; } if (!m_threads.empty()) m_condtion.notify_all(); for (auto& thread : m_threads) { if (thread->joinable()) { cout << thread->get_id() << endl; thread->join(); delete thread; } } m_threads.clear();}void ThreadManage::AddTask(Task task){ if (m_bIsBusy) { std::unique_lock
lock(m_mutex); m_task.push(task); m_condtion.notify_one(); } }void ThreadManage::Work(){ while (m_bIsBusy) { std::unique_lock
lock(m_mutex); m_condtion.wait(lock); if (m_task.empty()) continue; else { Task task; task = m_task.front(); m_task.pop(); task(); } }}

main.cpp

#include "threadManage.h"void func(){	cout << "func" << endl;}int main(){	cout << "main" << endl;	//thread th(func);	//th.join();	ThreadManage thread(3);	thread.StartThread();		for (int i = 0; i < 3; i++)	{		thread.AddTask(func);	}	std::this_thread::sleep_for(std::chrono::microseconds(1000));	thread.StopThread();	return 0;}

 

转载地址:https://blog.csdn.net/c_shell_python/article/details/104890725 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:欢聚时代c++开发岗位面试经验
下一篇:C/C++实现字符串的反向输出

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年02月29日 04时24分09秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

ubuntu 退出anaconda环境_从零开始深度学习第15讲:ubuntu16.04 下深度学习开发环境搭建与配置... 2019-04-21
稳定币usda是哪个发行的_武夷山币装帧款曝光,共4款设计,你喜欢哪款? 2019-04-21
可变车道怎么走不违章_走ETC竟比人工车道贵50%!交警:这3点不知道,吃亏的是自己... 2019-04-21
苹果笔记本的end键_笔记本用户的大烦恼:触控板,想好好用你不容易 2019-04-21
趣玩机器人什么时候成立的_【直播回顾】当我们谈机器人集成调试的时候在谈什么... 2019-04-21
中考大数据大连79_中考大数据 | 大连部分初中2019年中考指标生录取最低分及人数统计!... 2019-04-21
vue 地理位置定位_HTML5地理位置 2019-04-21
pac代理模式什么意思_托管仓库租赁电商仓储运营模式托管什么意思 2019-04-21
validated 验证数组_在 Laravel 中处理请求验证的智能方法 2019-04-21
洞泾智能机器人产业基地_G60科创走廊洞泾人工智能产业基地(核心区块)暨洞泾镇招商人员培训班顺利开班... 2019-04-21
java 拼接路径优雅方式_Java安全编码实践总结 2019-04-21
realme x2 深度测试打不开_搭载65W超级闪充,realme真我X7手机充电评测 2019-04-21
整数取反编程_【每日编程185期】数字的补数 2019-04-21
能用别的软件吗_手机软件能用蓝牙传送吗 2019-04-21
为什么图片要2的倍数_为什么宝宝喜欢流“口水”?这种2种原因父母要知道,建议收藏... 2019-04-21
下载了XAMPP怎样打开MYSQL_xampp mysql安装启动 2019-04-21
pdo转mysql_mysql转mysqli或pdo 2019-04-21
mysql如果没有表就创建_mysql – 改变表是否存在或创建如果没有 2019-04-21
ireport连接mysql_ireport 4.5教程之数据源介绍 2019-04-21
mysql多维模型_数据仓库数据库设计方法---关系模型和多维模型比较分析 2019-04-21