加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何在循环中连续打印变量,并在Linux下用C命中一个转义键终止?

发布时间:2020-12-14 02:13:42 所属栏目:Linux 来源:网络整理
导读:参见英文答案 C non-blocking keyboard input????????????????????????????????????10个 请在下面找到代码部分.我想在循环中连续打印变量的当前值.一旦我按下转义键,就必须终止循环.这里的问题是执行在getchar函数处停止.但我希望它继续并打印变量的值,直到
参见英文答案 > C non-blocking keyboard input????????????????????????????????????10个
请在下面找到代码部分.我想在循环中连续打印变量的当前值.一旦我按下转义键,就必须终止循环.这里的问题是执行在getchar函数处停止.但我希望它继续并打印变量的值,直到我点击退出按钮.

do
{
     vUpdateVariable();        // routine to update the current value of variable
     printf("Value is %fr",fVariable); 
     ucKey = getchar();
     usleep(1000);
}while (ucKey != 0x1B);

解决方法

有很多方法可以做到这一点,包括提到 here,但我个人最喜欢的是使用叉子和信号.在每次循环迭代中,这比非阻塞操作更有效(不会浪费系统调用,因此不会浪费上下文切换).

你有效地分配一个工作进程来执行循环,安装一个信号处理程序,如USR1然后让你的父进程等待一个按键阻塞,一旦它收到所需的密钥,它就可以将USR1信号发送到另一个进程,这将导致信号处理程序清理并终止.

有关详细信息,请参阅这些:

> http://linux.die.net/man/2/fork
> http://man7.org/linux/man-pages/man7/signal.7.html

我还要注意,这个解决方案适用于任何阻塞情况,您可以使用非阻塞IO进行修复,并且通常会节省一些CPU时间,尽管在创建fork时会花费一点内存和CPU.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读