C では、Boost ライブラリを使用してスレッド プールを作成するのは簡単なプロセスが必要です。
まず、 asio::io_service と thread_group をインスタンス化します。次に、io_service に接続されているスレッドを thread_group に追加します。その後、boost::bind 関数を利用してタスクをスレッドに割り当てることができます。
スレッドを停止するには、単純に io_service を中止し、すべてのスレッドを結合します。
必要なヘッダー ファイルは次のとおりです。
#include <boost/asio/io_service.hpp> #include <boost/bind.hpp> #include <boost/thread/thread.hpp>
実装例を以下に示します:
// Establish an io_service and a thread_group (essentially a pool) boost::asio::io_service ioService; boost::thread_group threadpool; // Commence ioService processing loop boost::asio::io_service::work work(ioService); // Add threads to pool (e.g., two in this case) threadpool.create_thread( boost::bind(&boost::asio::io_service::run, &ioService) ); threadpool.create_thread( boost::bind(&boost::asio::io_service::run, &ioService) ); // Assign tasks to thread pool via ioService.post() // Refer to "http://www.boost.org/doc/libs/1_54_0/libs/bind/bind.html#with_functions" for details on boost::bind ioService.post(boost::bind(myTask, "Hello World!")); ioService.post(boost::bind(clearCache, "./cache")); ioService.post(boost::bind(getSocialUpdates, "twitter,gmail,facebook,tumblr,reddit")); // Halt ioService processing loop (no new tasks will execute after this point) ioService.stop(); // Wait and combine threads in thread pool threadpool.join_all();
(出典:レシピ
以上がC で Boost を使用してスレッド プールを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。