打破用户输入,否则继续

时间:2012-12-22 01:00:43

标签: c++ loops user-input

我有一个程序将处理大量数据。我已经有了适当的东西,可以停下来,并从中断处继续。

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

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

    processFile(i);
    /*
     *  ...
     *
     */
}

我知道您可以 提示 进行用户输入, 如果 符合某些条件则会中断。 ..但我希望它默认继续运行而不用用户输入。

我想我很久以前可能在java中做过同样的事情,而且IIRC我最终使用了线程 - 这是唯一可以在这里进行的方法吗?或者有没有办法寻找像Cntrl-C这样的键盘转义序列,然后表现出某种方式?


编辑:如果有一个原因 cant 这样的事情没有线程就完成,我很想知道为什么,作为阱。

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

正如评论中所提到的,C和C ++被设计为在大量不同的机器上运行,并且您对“必须以这种方式执行此操作”的规范中提出的要求越多,语言受限越多这样它就不能在特定的系统上运行 - 如果你的终端和计算机之间只有一个110位/秒,半双工(数据一次只能单向一行),该怎么办?而你只有一个处理器,运行频率为1.2MHz ......