2013-05-13 2 views
0

방금 ​​다른 스레드로 작업하기 시작했으며 "무한"문제에 직면하고 있습니다. 기본 아이디어는 판독기의 스레드를 시작하여 교정을 위해 판독을 중지하는 것입니다. 그 후에는 계속 진행해야합니다.C++ 스레드를 시작, 중지 및 다시 시작하는 동안 발생하는 문제

다음 코드는 내가하려는 일의 최소한의 예입니다. 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 어떤 입력을 취득 할 때까지 스레드 실행 처음. 그 후 프로그램은 두 번째 또는 세 번째 cin에서 기다리지 않고 계속됩니다. 누구나 왜이 문제가 발생했는지 또는 어떻게 막을 수 있었는지 생각해 보았습니까?

미리 알려 주셔서 감사합니다.

+0

메시지가 표시되면 어떤 입력을 하시겠습니까? – interjay

+0

나는 C++ 거룩한 전쟁을 시작하는 것을 두려워하지만, 그런 경우 나는 단지 다음과 같이 쓴다.'char c; scanf ("% c", &c);'Enter 키를 계속해서 누르면 C++ 스트림보다 훨씬 잘 수행됩니다.) –

+0

또한 boost :: this_thread :: sleep (boost :: posix_time :: milliseconds (2000)); –

답변

0

std::cin에는 어떤 종류의 입력 사항이 있습니까? 숫자 (int)가 아닌 경우 std::cinfailbit으로 설정되고 모든 추가 입력은 즉시 반환됩니다. 사용자가 을 기다리고 싶을 경우 std::ignore(std::numeric_limits<streamsize>::max(), '\n')을 사용하면 이 좋은 해결책입니다. 사용자가 새로운 행을 입력 할 때까지 대기합니다.

+0

어쨌든'Windows.h'를 이미 포함하고 있다면 제대로 일시 중지하는 또 다른 방법은'system ("pause");입니다. –

+0

std :: cin 사용법에 대한 귀하의 의견은 많은 도움이되었습니다. std :: getline을 사용하여 스트리밍 코드를 변경했는데 이제는 문제가 해결되었습니다. –

관련 문제