当前位置: 首页 > news >正文

百度站长收录入口网络信息公司

百度站长收录入口,网络信息公司,wordpress积分商城,拖拽式在线网页制作工具原理说明#xff1a; 1. 线程池创建时#xff0c;指定线程池的大小thread_size。当有新的函数任务通过函数addFunction ()添加进来后#xff0c;其中一个线程执行函数。一个线程一次执行一个函数。如果函数数量大与线程池数量#xff0c;则后来的函数等待。 2. 线程池内部…原理说明 1. 线程池创建时指定线程池的大小thread_size。当有新的函数任务通过函数addFunction ()添加进来后其中一个线程执行函数。一个线程一次执行一个函数。如果函数数量大与线程池数量则后来的函数等待。 2. 线程池内部有个容器m_functions 来存储待执行的函数。函数执行后从队列中移除。 3.  stopAll()函数会停止线程池。 ThreadPool.h //ThreadPool.h #include condition_variable #include cstddef #include functional #include future #include memory #include mutex #include queue #include thread #include vectorclass ThreadPool { public:static ThreadPool* getInstance(size_t thread_size 1); //默认线程池大小void addFunction(std::functionvoid() task); //添加需要执行的函数~ThreadPool();void stopAll(bool immediately); //停止线程池 immediately:true立即停止 immediately:false等待当前线程函数执行完后停止。 private:ThreadPool(size_t thread_size);private:void workerThreadHandler();std::vectorstd::thread m_workers; //线程容器std::queuestd::functionvoid() m_functions; //待执行的函数容器std::mutex m_queue_mutex;std::condition_variable m_condition;bool m_stop; //线程池停止状态std::thread m_wakeTimerThread;std::mutex m_timer_mutex; };ThreadPool.cpp #include ThreadPool.h #include chrono #include memory #include thread #include pthread.h #include iostream using namespace std;ThreadPool* ThreadPool::getInstance(size_t thread_size) {static std::mutex m_lock;static std::shared_ptrThreadPool m_instancenullptr;if (nullptr m_instance){m_instance.reset(new ThreadPool(thread_size));}return m_instance.get(); } ThreadPool::ThreadPool(size_t thread_size) : m_stop(false){m_workers.reserve(thread_size);for (size_t i0; ithread_size; i){m_workers.emplace_back([this, i](){ //创建线程池中的线程workerThreadHandler();});}//辅助线程每隔一段时间发送一次唤醒防止线程阻塞m_wakeTimerThread std::thread([this](){ for(;!this-m_stop;){std::unique_lockstd::mutex lock(this-m_timer_mutex);std::this_thread::sleep_for(std::chrono::milliseconds(2000));pthread_testcancel();m_condition.notify_all();std::coutwake upstd::endl;}});std::cout__func__std::endl; }//线程循环函数循环查询函数容器是否为空不为空则读取一个函数并执行。 void ThreadPool::workerThreadHandler() {for (;!this-m_stop;){std::functionvoid() task;{std::unique_lockstd::mutex lock(this-m_queue_mutex);std::couttasks begin size:this-m_functions.size() stop:m_stopstd::endl;if (!m_stop m_functions.empty()){this-m_condition.wait(lock);}pthread_testcancel(); //作为线程的终止点if (this-m_stop){return;}if (this-m_functions.empty()){continue;}task std::move(this-m_functions.front());this-m_functions.pop();std::coutstd::this_thread::get_id() tasks end size:this-m_functions.size()std::endl;}task();std::cout__func__ end taskstd::endl;std::this_thread::sleep_for(std::chrono::milliseconds(200));} }void ThreadPool::addFunction(std::functionvoid() task) //添加待执行的函数 {std::unique_lockstd::mutex lock(m_queue_mutex);if (m_stop){return;}m_functions.emplace(std::move(task));m_condition.notify_one(); }ThreadPool::~ThreadPool() {{std::unique_lockstd::mutex lock(m_queue_mutex);m_stop true;}m_condition.notify_all();for (std::thread worker: m_workers){worker.join();}m_wakeTimerThread.join();std::cout__func__std::endl; }void ThreadPool::stopAll(bool immediately) //停止线程 immediately:true立即停止 {this-m_stop true;if (immediately){for (std::thread worker: m_workers){pthread_cancel(worker.native_handle());}pthread_cancel(m_wakeTimerThread.native_handle());} }测试程序main.cpp #include iostream #include chrono #include mutex #include ThreadPool.husing namespace std;static std::mutex m_mutex; void ProcessFunc111() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout__func__ endstd::endl; }void ProcessFunc222() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc333() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc444() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc555() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc666() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout__func__ endstd::endl; }int main() {ThreadPool::getInstance(5);ThreadPool::getInstance()-addFunction([](){ProcessFunc111();});ThreadPool::getInstance()-addFunction([](){ProcessFunc222();});ThreadPool::getInstance()-addFunction([](){ProcessFunc333();});ThreadPool::getInstance()-addFunction([](){ProcessFunc444();});ThreadPool::getInstance()-addFunction([](){ProcessFunc555();});ThreadPool::getInstance()-addFunction([](){ProcessFunc666();});getchar();return 0; }执行结果 tasks begin size:0 stop:0 ThreadPooltasks begin size: 0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 140563906656000 tasks end size:2 ProcessFunc111 begin 140563898263296 tasks end size:4 ProcessFunc222 begin 140563881477888 tasks end size:3 ProcessFunc333 begin 140563743504128 tasks end size:2 ProcessFunc444 begin 140563889870592 tasks end size:1 ProcessFunc555 begin wake up ProcessFunc111 end workerThreadHandler end task tasks begin size:1 stop:0 140563906656000 tasks end size:0 ProcessFunc666 begin ProcessFunc222 end wake up workerThreadHandler end task ProcessFunc333ProcessFunc555ProcessFunc444 endendworkerThreadHandler end taskworkerThreadHandler end taskend workerThreadHandler end task tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 wake up tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 ProcessFunc666 end workerThreadHandler end task tasks begin size:0 stop:0 wake up tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 ...测试程序2,调用线程池停止程序 #include iostream #include chrono #include mutex #include ThreadPool.husing namespace std;static std::mutex m_mutex; void ProcessFunc111() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout__func__ endstd::endl; }void ProcessFunc222() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc333() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc444() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc555() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc666() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout__func__ endstd::endl; }int main() {ThreadPool::getInstance(5);ThreadPool::getInstance()-addFunction([](){ProcessFunc111();});ThreadPool::getInstance()-addFunction([](){ProcessFunc222();});ThreadPool::getInstance()-addFunction([](){ProcessFunc333();});ThreadPool::getInstance()-addFunction([](){ProcessFunc444();});ThreadPool::getInstance()-addFunction([](){ProcessFunc555();});ThreadPool::getInstance()-addFunction([](){ProcessFunc666();});std::this_thread::sleep_for(std::chrono::seconds(1));std::coutstop all std::endl;ThreadPool::getInstance()-stopAll(false);getchar();return 0; }执行结果 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:ThreadPool0 stop:0tasks begin size:0 stop:0 140190941017856 tasks end size:5 ProcessFunc111 begin 140190932625152 tasks end size:4 ProcessFunc222 begin 140190966195968 tasks end size:3 ProcessFunc333 begin 140190949410560 tasks end size:2 ProcessFunc444 begin 140190957803264 tasks end size:1 ProcessFunc555 begin stop all wake up ProcessFunc111 end workerThreadHandler end task ProcessFunc444 end workerThreadHandler end task ProcessFunc333 end workerThreadHandler end task ProcessFunc222 end workerThreadHandler end task ProcessFunc555 end workerThreadHandler end task测试程序3立即停止线程池 #include iostream #include chrono #include mutex #include ThreadPool.husing namespace std;static std::mutex m_mutex; void ProcessFunc111() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout__func__ endstd::endl; }void ProcessFunc222() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc333() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc444() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc555() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(4));std::cout__func__ endstd::endl; }void ProcessFunc666() {std::cout__func__ beginstd::endl;std::this_thread::sleep_for(std::chrono::seconds(3));std::cout__func__ endstd::endl; }int main() {ThreadPool::getInstance(5);ThreadPool::getInstance()-addFunction([](){ProcessFunc111();});ThreadPool::getInstance()-addFunction([](){ProcessFunc222();});ThreadPool::getInstance()-addFunction([](){ProcessFunc333();});ThreadPool::getInstance()-addFunction([](){ProcessFunc444();});ThreadPool::getInstance()-addFunction([](){ProcessFunc555();});ThreadPool::getInstance()-addFunction([](){ProcessFunc666();});std::this_thread::sleep_for(std::chrono::seconds(1));std::coutstop all std::endl;ThreadPool::getInstance()-stopAll(true);getchar();return 0; }执行结果 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 tasks begin size:0 stop:0 ThreadPool 139831215929088 tasks end size:5 ProcessFunc111 begin tasks begin size:5 stop:0 139831199143680 tasks end size:4 ProcessFunc222 begin 139831224321792 tasks end size:3 ProcessFunc333 begin 139831207536384 tasks end size:2 ProcessFunc444 begin 139831232714496 tasks end size:1 ProcessFunc555 begin stop all
http://www.w-s-a.com/news/353321/

相关文章:

  • 天元建设集团有限公司资质郑州网站seo推广
  • 免费网站后台管理系统模板下载百度网盘app下载安装
  • 开封网站建设培训郑州高端网站建设哪家好
  • 东莞哪家做网站很有名的公司即墨专业医院网站制作公司
  • 做面食网站china cd wordpress
  • 门户网站 营销优秀建筑模型案例作品
  • 训做网站的心得体会范文中山市 有限公司网站建设
  • 服装电子商务网站建设过程与实现两学一做学习教育网站
  • 住房和城建设网站怎么用源码建站
  • 监理工程师证查询网站百度关键词优化软件网站
  • 关于建筑建设的网站asp网站建设报告书
  • 服务二级公司网站建设平台销售模式有哪些
  • 南昌县建设局网站微信分销小程序开发
  • 网站设计师需要什么知识与技能wordpress个性
  • 做茶叶网站的目的和规划有什么做照片书的网站
  • 开福区城乡建设局门户网站关键词挖掘查询工具爱站网
  • 网站建设全国排名沈阳seo按天计费
  • 成都公司网站设计无锡seo网站推广费用
  • 建网站平台要多少钱购物网站界面设计策划
  • 学完js了可以做哪些网站长沙建站官网
  • 怎么样做问卷网站多少钱英语
  • 房产网站建设方案建筑公司是干什么的
  • wordpress建的大型网站柳州市网站建设
  • 石家庄做网站的公司有哪些微信自媒体网站建设
  • 池州哪里有做网站注册公司有哪些风险
  • 做古代风格头像的网站对网站政务建设的建议
  • 网站搜索栏怎么做设计个网站要多少钱
  • 阿里巴巴网站建设目标wamp wordpress
  • 自己做的网站怎么挂网上金蝶erp
  • 网站的页面由什么组成淘宝网网站建设的需求分析