在c ++中启动,停止和重新启动线程时出现问题

时间:2013-05-13 13:44:58

标签: c++ multithreading

我刚开始使用不同的线程,现在面临“无限”问题。基本思路是启动检测器读出的线程并将其停止以进行校准。之后它应该继续。

以下代码是我尝试做的最小示例。 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。有谁知道为什么会出现这种行为或我怎么能阻止它?

非常感谢您的建议。

1 个答案:

答案 0 :(得分:0)

您对std::cin有什么样的意见?如果不是 一个数字(int),然后std::cin将设置failbit,以及全部 进一步输入将是无操作,立即返回。如果你 只是想等待用户做某事,使用 std::ignore( std::numeric_limits<streamsize>::max(), '\n' )是 一个好的解决方案这将等到用户输入新内容 线。