방금 다른 스레드로 작업하기 시작했으며 "무한"문제에 직면하고 있습니다. 기본 아이디어는 판독기의 스레드를 시작하여 교정을 위해 판독을 중지하는 것입니다. 그 후에는 계속 진행해야합니다.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에서 기다리지 않고 계속됩니다. 누구나 왜이 문제가 발생했는지 또는 어떻게 막을 수 있었는지 생각해 보았습니까?
미리 알려 주셔서 감사합니다.
메시지가 표시되면 어떤 입력을 하시겠습니까? – interjay
나는 C++ 거룩한 전쟁을 시작하는 것을 두려워하지만, 그런 경우 나는 단지 다음과 같이 쓴다.'char c; scanf ("% c", &c);'Enter 키를 계속해서 누르면 C++ 스트림보다 훨씬 잘 수행됩니다.) –
또한 boost :: this_thread :: sleep (boost :: posix_time :: milliseconds (2000)); –