【问题标题】:Get trigger from console in C++在 C++ 中从控制台获取触发器
【发布时间】:2013-07-09 14:52:07
【问题描述】:

我正在为机器人编写应用程序。

下面的伪代码描述了应用程序所需的 UI:

 while(true){
      if (spacebar is not pressed){
           //do something
      }
      else{
           sleep(1); //wait for a second
      }     
 }

如果我使用 cin 或其他一些控制台输入读取功能,那么它将等待用户按下某些东西。如何确保它不会等待获取任何输入?

我正在使用 Ubuntu。但我不希望它是特定于操作系统的。

答案here 似乎是特定于操作系统的。

【问题讨论】:

  • 你使用的是什么操作系统?
  • 不幸的是,您的代码将需要特定于操作系统,或者您需要找到一个跨平台库来隐藏操作系统的特定性。 C++ 没有为您提供一种可移植的方式来执行此操作。
  • 谢谢@MatsPetersson。它有帮助!

标签: c++ c user-interface


【解决方案1】:

终端级输入

与“标准输入/输出”流概念相比,您所要求的非常接近硬件(按键/按键释放)。所以你的实现必须是特定于操作系统的。话虽如此,要使用的库是 curses[1],它已经存在了很长时间,并且在许多 Un*x 平台上都是标准的。 GNU ncurses 风格几乎可以编译所有这些,它是几乎所有 Linux 环境中的标准安装,在默认情况下未安装的地方你可以找到它。它在 Windows (cygwin)、os/2 和一堆嵌入式系统等中也能很好地工作,所以你应该能够使用 curses 编写一个相当可移植的软件来做你想做的事情。

【讨论】:

    【解决方案2】:

    不清楚您要的是什么。在if 中,是 基于是否输入了空格字符的条件, 或者用户当前是否正在按住空格键?在 第一种情况,您需要类似curses (便携式 确实在输入每个字符时获取每个字符的库, 没有回声)。第二,我认为没有 便携式解决方案。即使是非便携的,你也可能无法 如果您的程序正在从终端窗口读取,则获取它 (例如 xterm);这种信息通常只存在 作为窗口事件,当您在程序中创建窗口时。

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2020-06-12
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      相关资源
      最近更新 更多