我刚刚开始使用不同的线程,现在正面临一个“无限”问题。基本思想是启动一个线程以读取检测器并停止它以进行校准。之后它应该继续。
以下代码是我正在尝试做的一个最小示例。Windows.h 用于睡眠功能,并且可以被任何延迟示例一小段时间的东西交换。
// 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 得到一些输入。之后程序继续进行,无需在第二个或第三个 cin 处等待。有谁知道为什么会发生这种行为或如何防止它?
非常感谢您的建议。