こんにちは私は現在、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は(まだ)引数を渡すことをサポートしていないようですので、boost::bindでそれをやろうとしました
結果のコードは次のようになります。
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:'boost :: noncopyable _ :: noncopyable :: noncopyable':クラスで宣言されたプライベートメンバーにアクセスできません' boost :: noncopyable _ :: noncopyable '
この診断は、コンパイラによって生成された関数'boost :: asio :: io_service :: io_service(const boost :: asio :: io_service&)'で発生しました。
これは、io_serviceオブジェクトを引数として渡すことができないことを意味しますか?
はいの場合、io_serviceをグローバルオブジェクトとして使用せずにこのスレッドプールを実行するにはどうすればよいですか?
そうでない場合、この問題の解決策は上記のコードでどのようになりますか?