【问题标题】:How to interrupt loop/process using terminal input in C++ on a Linux application如何在 Linux 应用程序上使用 C++ 中的终端输入中断循环/进程
【发布时间】:2014-10-09 05:57:11
【问题描述】:

我正在编写一个 Linux 命令行应用程序,该应用程序最终会导致从一个硬件获取数据。数据采集​​的本质是它将以某个定义的数据速率一致地向程序提供数据。一旦用户进入 RxData(接收循环),我们不想停止,除非我们从终端收到命令告诉它停止。我预见的问题是使用 getchar() 将在 while 循环的每次迭代中挂起循环,因为程序将期望用户输入输入。我的这种行为有错吗?

附带说明,我知道在使用嵌入式设备时,您可以简单地检查一个寄存器以查看缓冲区是否增加,并使用它来确定是否从缓冲区读取。我在 Linux 应用程序上没有那​​么奢侈(或者我有吗?)。我可以运行一些这样的函数(我们称之为 getCharAvailable),检查是否已输入数据,然后向我的程序发出信号以停止获取数据吗?

我不能简单地使用 SIGINT,因为我需要向硬件发出信号以停止数据采集以及向记录的数据添加标头。需要有停止采集的信号。

【问题讨论】:

  • 我建议为信号实现一个​​回调函数处理程序,(当接收到信号信号时)执行所有需要的清理,停止硬件,然后退出程序。

标签: c++ c linux


【解决方案1】:

在 Linux(或任何其他 Unix 风格)中,您可以使用 select 查看是否有关于 2 个(或更多)文件描述符、套接字或任何其他可以读取的东西的可用数据>。 (就是这个系统调用存在的原因……)

【讨论】:

  • 这是最直接的解决方案。谢谢!
【解决方案2】:

使用ncurse 库并在non-delay 模式下使用getch

【讨论】:

  • 谢谢。我不知道这个图书馆存在。这看起来应该可以工作。我会试一试并报告。
猜你喜欢
  • 2013-05-09
  • 2013-06-05
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多