[C++] manage background threads with boost::thread
#include <boost/thread.hpp> #include <boost/chrono.hpp> #include <boost/bind.hpp> #include <boost/function.hpp> #include <iostream> typedef boost::function<void()> ThreadFunc; void InvokeBackgroundThread(ThreadFunc f) { while(true) { try { boost::this_thread::interruption_point(); f(); } catch(boost::thread_interrupted const&) { std::cout << "Will Quit : " << boost::this_thread::get_id() << std::endl; break; } } } void PrintWork() { std::cout << __FUNCTION__ << "Id:"<< boost::this_thread::get_id() << std::endl; boost::this_thread::sleep_for(boost::chrono::seconds(2)); } int main(int argc,char* argv[]) { std::vector<boost::thread> thread_pool; for(int index=0; index<2; index++) { ThreadFunc thread_func(PrintWork); boost::thread go_thread(boost::bind(InvokeBackgroundThread,thread_func)); thread_pool.push_back(boost::move(go_thread)); } std::cout << "Main Go Sleep" << std::endl; boost::this_thread::sleep_for(boost::chrono::seconds(10)); std::cout << "Main WakeUp" << std::endl; for(int index=0; index<2; index++) { thread_pool[index].interrupt(); } for(int index=0; index<2; index++) { thread_pool[index].join(); } std::cout << "Finish" << std::endl; return 0; }
Protoss a good race, do not change it.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步