私のプログラムには、ユーザーからコマンド入力を受け取るメイン スレッドがあります。これとは別に、バックグラウンドでデータを大量に処理するワーカー スレッドが複数 (少なくとも 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 );
}
}
ここで私が間違っていることについて誰かがアドバイスしてくれますか、それとも私が達成しようとしていることに対するより良い解決策を提案してくれますか?
ありがとう