所以我有一個線程池允許動態調整大小和使用任務範例。我想知道 - 當人們得到這樣的東西時,他們會不再手工創建線程,而只是始終使用任務?那麼,在我的類中使用線程池/任務執行程序來創建線程是否很常見?所以我給自己一個線程池任務管理器系統。我應該從現在開始只使用它來創建所有線程嗎?
mythread pool基於boost::asio::io_service與boost::packaged_task。它的工作原理是隻有頭,具有升壓1.47.0所有你需要爲它工作是timer,my costume thread_group和thread_pool類。開發這樣一個小東西是相當有趣的,但現在我站在一個兩難的境地。
我的任務結構是這樣的:
boost::shared_ptr< boost::packaged_task<int> > task(new boost::packaged_task<int>(boost::bind(calculate_the_answer_to_life_the_universe_and_everything, argument_int_value )));
這是挺了過來頭的情況下,當我想創建一個函數,將更新的任何回報,將不得不再次在它的一些運行定時器(例如文件索引器需要檢查每5秒,如果用戶已經創建任何新的文件中某個文件夾)
所以我就可以:
void infinite_thread()
{
while(true)
{
timerForCaptureFame.restart();
do_stuff();
spendedTimeForCaptureFame = (int64_t)timerForCaptureFame.elapsed();
if (spendedTimeForCaptureFame < desiredTimeForCaptureFame)
boost::this_thread::sleep(boost::posix_time::milliseconds(desiredTimeForCaptureFame - spendedTimeForCaptureFame));
}
}
,我會簡單地創建這wraper與代碼的新線程像
boost::thread workerThread(infinite_thread);
但現在我可以有任務,所以它可能之後的一小段時間變成
boost::shared_ptr< boost::packaged_task<void> > task(new boost::packaged_task<void>(infinite_thread));
task_manager->post<void>(task);
我的任務管理器將獲得該線程不會關閉本身並且通常會添加新的執行線程以保持這個工作。
所以我真的不知道是否有一個thread_pool/task_pool只用於線程創建的線程(例如每個類),或者人們將任務與「純」線程混合在一起嗎?