如何让C++程序在按下某个键时立即停止执行

问题描述 投票:0回答:0

我希望 C++ 程序在 WHILE 循环内按下某个键后立即终止。该程序不需要进一步执行任何行。 例如,更简单的方法是放置一个条件(循环的开始或结束),但在这种情况下,即使用户按下一个键,程序也会先执行直到条件匹配,然后终止。 例如

while (true) {
        cout << "line 1" << endl;
        cout << "line 2" << endl;
        cout << "line 3" << endl;
        cout << "line 4" << endl;
        cout << "line 5" << endl;
        cout << "line 6" << endl;
        cout << "line 7" << endl;
        if (_kbhit() && _getch() == 'q') {
            std::cout << "Program terminated by user." << std::endl;
            return 0;
        }

    }

在上面的代码中,假设循环的第一条语句正在执行并且用户按下'q'。该程序应立即终止,无需进一步执行其余语句,并在达到 if 条件时终止。 有什么办法可以做到吗?我尝试使用线程和信号,但没有成功。

我尝试使用一个单独的线程来等待用户输入并设置一个标志来指示程序应该终止,或者使用信号处理程序。问题是我再次陷入同样的问题,即当按下键时,while 将首先完成其执行,直到达到检查条件并终止是否为真。

std::atomic<bool> g_signal_flag(false);
void wait_for_input()
{
    while (true) {
        if (std::cin.get() == 'q') {
            g_signal_flag = true;
            return;
        }
    }
}

int main()
{
    std::thread input_thread(wait_for_input);

    while (!g_signal_flag) {
        std::cout << "1" << std::endl;

        if (g_signal_flag) {
            std::cout << "Program terminated by user." << std::endl;
            return 0;
        }
    }
    input_thread.join();
}
c++ c++14
© www.soinside.com 2019 - 2024. All rights reserved.