1

メインスレッドが実行されている限り、バックグラウンドで実行されるデーモンスレッドを持つプログラムを書いています。メインスレッドが終了したらデーモンスレッドを終了させたいので、以下の2つの方法を試しました。

  1. pthread_kill を使用すると、取り外し可能として初期化した場合でもメモリ リークが発生します (このスレッドに参加する必要はありません)。
  2. bool _daemonRunこれはうまくいかなかったので、グローバルが true である限り、デーモン スレッドをループで実行することを考えました。メイン スレッドが終了する前_daemonRunに false に設定し、デーモンでpthread_exit(NULL)ループの外で使用します。問題は - どうすればスレッドを再開できますか? スレッドを待たせたくないので、条件変数の使用は混乱のようです...

何か案は?ありがとう

4

1 に答える 1

2

メインスレッドが存在する前に、デーモンスレッドがそのリソース(メモリなど)を適切に解放することに関心があるように思われます。したがって、切り離されたスレッドとして作成することは私には間違っているように思われます。それは、そのスレッドがいつ終了するかを気にしないことを示しているからです。

したがって、次のことをお勧めします。デーモンスレッドを通常のスレッドとして作成します。次に、メインスレッドが存在する前に、に設定_daemonRunfalseます。最後に、デーモンスレッドにjoin()します。

于 2012-05-07T10:08:12.597 に答える