我正在开发一个 Windows 应用程序,它有一个单独的线程,用于通过标准输入处理用户(或第 3 方)应用程序输入。
这个线程被设计成它通过WaitForMultipleObjects
两个事件等待:
- 一个死亡信号。当这个信号产生时,接口处理线程关闭。
- 一个接口信号。当这个信号被提升时,有输入准备好被读取。输入被读取和处理。
在 Windows 下,该线程进入一个主循环,Wait
用于这两个事件(其中bWaitAll
is FALSE
)。等待 stdin 句柄的作用是在有输入准备好读取时发出信号,而另一个事件是从应用程序的其他地方设置的。
这完全符合我的要求。它在不进入忙等待的情况下等待引发事件,并且同时等待这两个事件。
我希望将此功能移植到 Linux,但我不确定如何达到预期的效果。从根本上说,我真正想要的是:
在 Linux 下,我如何设计一个线程,以便它立即响应标准输入上的用户输入,但它也可以立即响应从应用程序的其他地方引发的终止标志?
为了完成后者,在我看来,在用户输入文本之前,我不能使用,cin
或任何其他阻塞的功能。然而,我不知道如何在基于控制台的应用程序中不阻塞地读取用户输入。gets
getch
我对架构的任何更改(如果有更多的 Linux-y 方式来做到这一点)持开放态度,其中包括在一个单独的线程中处理用户输入,该线程可以从应用程序的其他地方终止。我正在使用 GCC 4.4 和 Boost 1.51。