stdin を介してユーザー (またはサードパーティ) アプリケーション入力を処理するための別のスレッドを持つ Windows アプリケーションを開発しています。
WaitForMultipleObjects
このスレッドは、次の 2 つのイベントで待機するように設計されています。
- 死の合図。このシグナルが発生すると、インターフェース処理スレッドがシャットダウンします。
- インターフェイス信号。この信号が発生すると、読み取り可能な入力が存在します。入力が読み取られ、処理されます。
Windows では、このスレッドは、Wait
これら 2 つのイベントのメイン ループに入ります (bWaitAll
はFALSE
)。stdin ハンドルを待機すると、読み取りの準備ができた入力があり、他のイベントがアプリケーションの別の場所から設定されたときに信号を送る効果があります。
これは私が望むとおりに機能します。ビジーウェイトに入らずにイベントが発生するのを待ち、両方のイベントを同時に待ちます。
この機能を Linux に移植したいと考えていますが、目的の結果を得る方法がわかりません。基本的に、私が本当に欲しいのはこれです:
Linux では、stdin でのユーザー入力に即座に応答するようにスレッドを設計するにはどうすればよいですか? また、アプリケーションの他の場所から発生した kill フラグにも即座に応答できますか?
後者を達成するために、ユーザーがテキストを入力するまでブロックするcin
、、、またはその他の機能を使用できないように思えます。それでも、コンソールベースのアプリケーションでブロックせずにユーザー入力を読み取る方法がわかりません。gets
getch
私は、アプリケーションの他の場所から終了できる別のスレッドでユーザー入力を処理することを含む、アーキテクチャの変更を受け入れます (これを行うためのより Linux 的な方法がある場合)。GCC 4.4 と Boost 1.51 を使用しています。