ワンショットで関数呼び出しを呼び出したいのですが。Boost / C ++でこれを行うための最良の方法は何ですか?
2つのパラメーターを渡したいので、結果は必要ありません。
ワンショットで関数呼び出しを呼び出したいのですが。Boost / C ++でこれを行うための最良の方法は何ですか?
2つのパラメーターを渡したいので、結果は必要ありません。
さて、あなたはスレッドをスピンアップして、それから二度とそれに参加することはありません。何かのようなもの:
boost::thread some_thread(&SomeFunction, param1, param2);
some_thread変数がスコープ外になると、実行スレッドが切り離され、再度結合できなくなります。ただし、この関数の処理時間が重要でない限り、スレッドをスピンアップするのは無駄です。
私はしばらくの間boost::threadを使用していませんが、クラスのドキュメントページに簡単な例があります:
void find_the_question(int the_answer);
boost::thread deep_thought_2(find_the_question,42);
関数が終了するとすぐにスレッドが終了すると思います。これは、スレッドがスコープから外れると破棄されるという点で、あなたが望むものではないかもしれません。それがうまくいかない場合は、おそらく、長時間実行されるスレッドプールを作成してから、ファンクターをboost::bindコンポジションとして渡す必要があります。
これを行う頻度によっては、ワーク キューと共にスレッドのプールを作成するのが最適な場合があります。スレッドを作成すると、1 秒間に数十回実行しようとすると、多くのオーバーヘッドが発生する可能性があります。戻り値を気にしなければ、とても簡単です。
スレッドを 1 つまたは 2 つ (または 10) スピンアップします。呼び出す関数のスレッド セーフなキューを用意します (パラメーターを関数にバインドし、それをキューに入れます)。スレッドはキューで何かが現れるのを待ち、最初にウェイクアップしたスレッドが作業を処理します。スレッドがジョブの実行を完了すると、再びキューで待機します。
それを行う 1 つの方法のアイデアについては、 このプロジェクトをご覧ください。
もちろん、UI の応答性を向上させるために数秒ごとに非同期呼び出しを行う場合は、毎回新しいスレッドを開始する方が簡単です。
おそらく、信号を発したいですか?
Qt のシグナルとスロットの機能がとても気に入りました。また、Boost にもシグナルとスロットがあることを知っています。ただし、ブーストでシグナル/スロットを使用したことはありません。