私はさまざまなスレッドで作業を始めたばかりで、現在「無限」の問題に直面しています。基本的な考え方は、検出器の読み取りのためにスレッドを開始し、キャリブレーションのためにスレッドを停止することです。その後も継続する必要があります。
次のコードは、私がやろうとしていることの最小限の例です。Windows.h は Sleep 関数に使用され、例を少し遅らせるものと交換される可能性があります。
// header for ThreadTest
#include <boost/thread.hpp>
#include <windows.h>
#include <iostream>
class ThreadTest;
void thread(ThreadTest* test);
class ThreadTest {
public:
bool _doWork;
void startTest(){
_doWork = true;
_test = boost::thread(thread,this);
}
void stopTest() {
_doWork = false;
_test.join();
};
private:
boost::thread _test;
};
void thread(ThreadTest* test) {
while (test->_doWork) {
std::cout << "Working..." << std::endl;
Sleep(2000);
}
}
int main(int argc, char* argv[])
{
ThreadTest test;
int a=0;
std::cout << "Start Test 1" << std::endl;
test.startTest();
std::cin >> a;
std::cout << "Stop Test 1" << std::endl;
test.stopTest();
std::cout << "Start Test 2" << std::endl;
test.startTest();
std::cin >> a;
std::cout << "Stop Test 2" << std::endl;
test.stopTest();
std::cout << "Start Test 3" << std::endl;
test.startTest();
std::cin >> a;
std::cout << "Stop Test 3" << std::endl;
test.stopTest();
return 0;
}
cin が何らかの入力を取得するまで、スレッドが初めて実行されます。その後、プログラムは 2 番目または 3 番目の cin で待つことなく続行されます。この動作が発生する理由、またはそれを防ぐ方法を知っている人はいますか?
アドバイスをいただきありがとうございます。