如何在 OS X 上用 C++ 中的按键中断循环?

Nat*_*iel 5 c++ keyboard macos ncurses

我想在 OS X 上的命令行应用程序中执行以下操作:

while (true) {
    // do some task
    if (user_has_pressed('x')) {
        // break out of the loop and do something different
    }
}
Run Code Online (Sandbox Code Playgroud)

为清楚起见,我不希望程序阻塞等待用户输入。我正在运行一个需要很多小时才能运行的数值模拟,我想按一个键来打印有关其进度的详细统计信息,或者中断它并更改参数等。

有一些现有的类似 问题,但答案要么建议仅使用 Windowsgetch功能,要么将终端切换到不同的输入模式。我不想这样做,因为我需要保留在ctrl-c不弄乱终端的情况下中断的能力。

我不想构建 Cocoa 应用程序,也不关心跨平台。我只是在寻找一种最简单快捷的方法来在一个只能在我自己的机器上运行的命令行应用程序中完成它。

我想一种选择是使用 ncurses。从简短的阅读来看,这似乎是一个比我想要的更重的选择 - 但是如果有人会发布一个简单的最小示例来完成上述任务,那将非常有帮助。

Pra*_*nny 0

以下内容可以提供帮助:

#include <iostream>
using namespace std;

int main() {
    while (cin.get() != 'x') {
        cout << "I am running." << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但如果您不希望程序停止,请使用此答案中提到的线程。