我的程序有一个主线程,它接受用户的命令输入。另外,它可能会增加(至少 1 个)工作线程在后台搅动数据。
用户可以通过在控制台中键入命令来终止程序。然而,当数据搅动完成时,主线程仍然阻塞等待用户输入,因此程序不会终止。
我想知道的是如何将终止命令“q\n”写入std::cin
工作线程中,以便阻塞命令输入线程(也是主线程)将终止。或者这会是一件坏事吗?我已经尝试过以下方法,但程序只是挂起或无法写入std::cin
,不知道为什么。
static ACE_THR_FUNC_RETURN worker( void *p) {
.....
if (_this->m_num_threads_done == _this->m_threads.size()) {
fputs("q\n", stdin);
}
}
在主线程上,这是从 main 调用的:
void runEventLoop()
{
printWelcomeMessage();
char buffer[MAXC];
while( !m_exitLoop )
{
std::cin.getline(buffer, MAXC);
if( std::cin.eof() )
break;
handleCommand( buffer );
}
}
有人会建议我在这里做错了什么,或者为我想要完成的事情提出更好的解决方案吗?
谢谢