在用户输入时中断,否则继续

Break on user input, otherwise continue

本文关键字:继续 中断 用户 输入      更新时间:2023-10-16

我有一个将要处理大量数据的程序。我已经准备好了一些东西,这样它就可以停止,并从它离开的地方恢复。

我希望能够设置它运行一段时间(例如处理1000个文件),但能够在用户输入时转义,例如:

for(int i = 0; i < 1000; i++) {
    if( checkForUserInput() ) { break; }
    processFile(i);
    /*
     *  ...
     *
     */
}

我知道你可以提示用户输入,而如果符合某些条件则中断…但是我想让它默认在没有用户输入的情况下继续运行

我想我可能在很久以前在java中做过同样的事情,而IIRC我最终使用了线程——这也是这里处理的唯一方法吗?或者是否有一种方法来查找键盘转义序列,如ctrl - c,然后以某种方式表现?


编辑:如果有一个原因为什么这样的事情不能在没有线程的情况下完成,我很想知道为什么,

谢谢!

用户输入被定义为阻塞。所以你需要设置一个超时时间,当你决定没有用户输入时,打破阻塞并继续。如果没有线程/中断,你就无法做到这一点。

不同平台处理用户中断的方式不同。阅读信号处理

如前所述,signal()可用于捕获控制台类型应用程序中的CTRL-C。但是没有标准的方法来读取输入而不阻塞。

针对不同的平台有一些不同的解决方案,所有这些解决方案都相当麻烦(当然,一旦您有了代码,将其复制到另一个项目中并不难)。

正如评论中提到的,C和c++是为在大量不同的机器上运行而设计的,你在规范中对"你必须这样做"的要求越多,语言就越受限制,以至于它不能在特定的系统上工作——如果在你的终端和计算机之间只有每秒110位的半双工(数据一次只能走一条路)呢?而且你只有一个处理器,运行频率为1.2MHz……