내 프로그램에는 사용자로부터 명령 입력을받는 주 스레드가 있습니다. 이와는 별도로 백그라운드에서 데이터를 변조하는 잠재적 인 배수의 작업자 스레드가 있습니다.작업자 스레드에서 cin으로 출력 (C++)
사용자는 콘솔에 입력하여 명령을 사용하여 프로그램을 종료 할 수 있습니다. 그러나 데이터 변동이 완료되면 주 스레드는 여전히 사용자 입력 대기를 차단하므로 프로그램이 종료되지 않습니다.
차단 명령 입력 스레드 (주 스레드)가 종료되도록 작업 스레드에서 std::cin
으로 "q \ n"종료 명령을 작성하는 방법을 알고 싶습니다. 아니면이 일이 좋지 않겠습니까? 아래에서 시도했지만 프로그램이 단순히 응답하지 않거나 std::cin
에 쓸 수 없습니다. 이유는 확실하지 않습니다. 메인 스레드에
static ACE_THR_FUNC_RETURN worker(void *p) {
.....
if (_this->m_num_threads_done == _this->m_threads.size()) {
fputs("q\n", stdin);
}
}
,이 메인에서 호출됩니다
void runEventLoop()
{
printWelcomeMessage();
char buffer[MAXC];
while(!m_exitLoop)
{
std::cin.getline(buffer, MAXC);
if(std::cin.eof())
break;
handleCommand(buffer);
}
}
사람이 내가 노력하고있어 더 나은 솔루션을 제안 그렇지 않으면 내가 잘못 여기서 뭘하는지에 대한 조언이나하시기 바랍니다 것입니다 달하다?
감사
std :: cin은 C++의 _input_ 스트림입니다. 당신은 그것에 쓰지 않고 그것을 읽을 수 있습니다. stdout에 대해 이야기하고 싶습니까? – Dima
유닉스에서는 출력을 입력으로 재 지정할 수 있습니다. 그래서 프로그래밍 방식으로 나는 당신도 그것을 할 수 있어야한다고 생각했다.하지만 나는 stdin에 대해 이야기하고있다. –
작업자 스레드는 프로그램 흐름 제어에 대한 결정을 내려서는 안되며, 사용자 입력을 듣고있는 주 스레드에 의해 처리되어야한다. 주 스레드에 대한 코드를 게시 할 수 있다면 좀 더 모듈 방식을 제안 할 수 있습니다. –