您好我目前正在嘗試創建一個io_service對象的線程池。麻煩與boost :: bind和io_service
我也發現瞭如何做到這一點(見那裏,例如1F:http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=2)爲例
這個例子中也可以(當然),但是我寧願儘量保持io_service對象非全局(它在這個例子中)。所以現在我已經考慮嘗試將io_service作爲參數傳遞給工作線程,因此將其保留爲「內部」。
的boost :: thread_group似乎並不具有傳遞參數雖然(還)支持,所以我試圖用升壓做::綁定
結果代碼看起來是這樣的:
void workerThread(io_service service)
{
service.run();
}
void initListeners() //this function gets called in the main function
{
io_service io_service;
//we give the io_service something to work here
boost::thread_group worker_threads;
for(int i = 0; i < 4; ++i)
worker_threads.create_thread(boost::bind(workerThread, io_service));
worker_threads.join_all();
}
然而,當我嘗試編譯這段代碼,他給我的錯誤
錯誤C2248:「助推::不可複製_ ::不可複製::不可複製」:不能訪問類的聲明刺激私有成員:: noncopyable_: :非C opyable」
此診斷髮生在編譯器生成的函數 '的boost :: ASIO :: io_service對象:: io_service對象(常量的boost ::支持ASIO :: io_service對象&)'
這是否意味着我不能傳遞一個io_service對象作爲參數?
如果是的話,我怎麼能做這個線程池,而沒有io_service作爲一個全局對象?
如果沒有,那麼這個問題的解決方案如何看起來像上面的代碼?
打了我一分鐘...... ;-) – alk
偉大的工程,不知道有關boost :: ref之前,所以我想我會從來沒有想過那:)而且我已經在等待所有線程加入還是不加入? – user1175111
@ user1175111:是的,你做得很好,它只是功能名稱表明它離開正在運行的線程。 – Dani