0

我有一个程序将处理大量数据。我已经做好了准备,这样它就可以停止,然后从中断的地方继续。

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

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

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

我知道您可以提示用户输入,如果它符合某些条件然后中断......但我希望它默认在没有用户输入的情况下继续运行。

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


编辑:如果没有线程就不能完成这样的事情是有原因的,我也很想知道为什么。

谢谢!

4

2 回答 2

3

用户输入按定义是阻塞的。因此,您需要设置一个超时时间,在此时间您决定没有用户输入,打破阻塞并继续。如果没有线程/中断,您将无法做到这一点。

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

于 2012-12-22T01:05:35.600 回答
0

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

不同的平台有一些不同的解决方案,都比较繁琐(当然,一旦有了代码,复制到另一个项目也不是那么难)。

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

于 2012-12-22T02:30:39.460 回答