0

C++ でプロセスが終了する前に、メイン関数の最後をキャッチし、別のスレッドで追加の操作を実行できるようにしたいと考えています。

メインスレッドへのハンドルを取得して参加しようとしましたが、 std::this_thread/boost::this_thread では現在のスレッドのハンドルにアクセスできないようです。

私がやりたいことは、基本的に次のとおりです。

void thread_function(thread_handler) {
  thread_handler.join();
  < Perform extra operations before the program finishes its main function >
}

int main() {
  < thread_function thread started in LD_PRELOAD>

  ....  Program runs .....
  return 0;
}

私のシナリオでは、thread_function スレッドは LD_PRELOAD を使用して共有ライブラリで呼び出されるため、これら 2 つの関数には共有状態がありませんが、後でmain()を呼び出すスレッドから何でも渡すことができます。メイン関数の最後をキャッチすることはできないかもしれませんが、誰かがこれについて知っている場合に備えて質問したいと思います。

4

1 に答える 1

-1

セマフォが必要なように思えますが、結局のところ、すべてのスレッドがプログラムの終了時に必要なことをすべて終了するまで、プログラムが閉じないようにする必要があります。

したがって、メインスレッドが停止していることを通知し、他のスレッド (複数ある場合) が終了して完了したことを報告するまで待機する必要があります。最も簡単な方法は、イベントを設定して他のスレッドに通知し、各スレッドが待機するスレッドに設定されたセマフォを通知するまで待機することです。

Kennel オブジェクトはこれに適合します。クロス プロセスで動作するため、共有ライブラリ全体で動作します。

于 2014-05-26T22:54:28.360 に答える