gpt4 book ai didi

c++ - 如何在命令行界面中处理 ctrl-break 信号

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:52 28 4
gpt4 key购买 nike

在开始之前,我想澄清一下,这不是一个命令行工具,而是一个通过自己的命令行界面接受命令的应用程序。

编辑:我必须为我之前的解释道歉,显然我没有很好地解释它。再来一次……

我正在构建一个接受用户命令的命令行界面应用程序。我有一个信号处理程序设置来捕获信号,然后设置一个我需要终止应用程序的标志。我遇到的问题是我能找到的所有控制台功能都被阻塞了,这意味着我无法检测到我需要退出我的控制台处理循环,直到用户按下一个键(或输入,取决于功能).

是否有一些标准方法可以进行非阻塞控制台交互,或者是否有一种优雅的方法来构建程序,以便如果我只是从信号线程终止,一切都会被正确处理和释放(请不要不要误解这一点,我知道如何使用锁定和释放信号线程的资源来完成这件事,但这可能会变得困惑,所以我宁愿避免它)

希望这个解释更有意义...

最佳答案

好的 - 这对我来说适用于 Windows 并且是可移植的 - 请注意#ifdef SIGBREAK - 这不是标准信号。

#include <csignal>
#include <iostream>
#include <ostream>
#include <string>
using namespace std;

namespace
{
volatile sig_atomic_t quit;

void signal_handler(int sig)
{
signal(sig, signal_handler);
quit = 1;
}
}

int main()
{
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#ifdef SIGBREAK
signal(SIGBREAK, signal_handler);
#endif
/* etc */

while (!quit)
{
string s;
cin >> s;
cout << s << endl;
}
cout << "quit = " << quit << endl;
}

关于c++ - 如何在命令行界面中处理 ctrl-break 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/181413/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com