我不知道如何把這個問題放在這個論壇中,我想問什麼,並希望得到一些輸入。C++中的線程池設計
我正在爲我的項目編寫一個線程池。我有以下設計。
我保持線程
std::vector<ThreadWrapper <threadFuncParam>* > m_vecThreads;
的載體和推動threds到列表
m_vecThreads.push_back(pThreadWrapper);
當新的請求到來時我正在線程池如下
if(!m_vecThreads.empty()) { ThreadWrapper <threadFuncParam>* pWrapper = m_vecThreads.back(); m_vecThreads.pop_back(); //... Awake threadd }
當線程工作完成後,它被推回到線程池。
趁現在gracefull關機我有設計優雅現在停止線程上面我面臨的問題,我如何能阻止線程在vector容器我從矢量坡平當請求服務,所以我失去了指針直到服務完成。 有沒有更好的我可以做到這一點或處理這種情況下,如地圖或其他標準C++支持的容器?
另一個問題是
在關閉過程中,我有一個場景線程在這裏做在我的情況下,來自這可能需要時間數據庫中讀取數據的過程,所以我不能等到它是完整的 ,我想送答覆客戶掛起的請求線程正在處理,我即將殺死該值是不好的。
謝謝!
你有什麼沒有線程的載體而指針到線程的向量。你如何自己實例化線程,你用'new'手動執行嗎?考慮將線程包裝存儲在另一個容器中,例如'std :: vector>',並將這些線程的地址放入'm_vecThreads'中。 –
leftaroundabout
你的「另一個問題」應該作爲一個真正的其他問題被問及+你不清楚你的問題是什麼。 – stefaanv