在c++中启动、停止和重新启动线程时的问题

Problems while starting, stopping and restarting a thread in c ++

本文关键字:线程 重新启动 问题 c++ 启动      更新时间:2023-10-16

我刚刚开始处理不同的线程,现在正面临一个"无穷大"的问题。基本思想是为检测器读出启动一个线程,并停止它以进行校准。之后应该继续。

下面的代码是我试图做的一个最小的例子。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得到一些输入。然后,程序继续运行,而不必在第二个或第三个窗口等待。有人知道为什么会发生这种行为,或者我该如何预防吗?

提前感谢您的建议

你对std::cin有什么样的输入?如果不是的话一个数字(int),那么std::cin将设置failbit,等等进一步的输入将是无操作,立即返回。如果你只想等待用户做点什么,使用std::ignore( std::numeric_limits<streamsize>::max(), 'n' )是好的解决方案;这将等待,直到用户输入一个新的线。