Linux で C++ でプログラムを作成しました。スレッドには pthread を使用しています。プログラムでスレッドを開始すると、このスレッドは関数を呼び出すまで実行されているため、停止する必要があります。ここで私のコードを見ることができます。
bool isRunning = false;
pthread_t thread;
void startThread() {
isRunning = true;
int thread_return = pthread_create(&thread, NULL, runThread, NULL);
}
bool stopThread() {
isRunning = false;
// wait until the thread will be finished
return true;
}
void* runThread(void* ptr) {
while(isRunning) {
// do smth.
}
pthread_exit(NULL);
}
スレッドが開始されると、それはスムーズに実行されます。の値がisRunning
なるまでfalse
、メインプログラム自体が他のことを行います。問題は、関数を呼び出すと、この関数が falsestopThread
に設定され、スレッドが while ループ内でタスクを完了するまで待機しないことです。私の質問は、スレッドの終了を待つ必要があることisRunning
を function にどのように言うことができるかです。stopThread
に設定した後pthread_join
、stopThread
関数を入れてみました。しかし、プログラムが無限に待機するという問題が発生することがあります。スレッドが早く終了したため、プログラムがスレッドを待つようになります。スレッドは while ループ内の別の部分に存在する可能性があるためです。そのため、スレッドがどれだけ終了する必要があるかわかりません。isRunning
false
ありがとうございました