gpt4 book ai didi

c - 如何在不使用读取器线程的情况下启用 C 应用程序的运行时命令?

转载 作者:行者123 更新时间:2023-11-30 15:29:07 25 4
gpt4 key购买 nike

我想实现一个具有以下结构的 C 应用程序:

int main()
{
initSystem();

while (1)
{
//do something
}

deinitSystem();

return EXIT_SUCCESS;
}

那么当软件执行时会发生什么,它进入while(1)循环,不要退出,正常做事。但问题是,如果我想停止应用程序,我需要它调用 deinitSystem()在关闭之前,只需在终端上使用 Ctrl+C 或 killall myprogram 终止应用程序即可不起作用;我需要向它发送一条命令,说“嘿,是时候停止了”,打破 while 循环并运行 deinitSystem

我这样做的正常方法是将键盘读取器放入循环的一部分,这样如果读取器读取退出命令,它就会中断循环。但这必须是一个非阻塞键盘读取器,而且我找不到任何有效的方法在 C + Linux 中执行此操作。我发现做到这一点的唯一方法是创建一个线程,仅从键盘读取此退出命令,用标志打破 while 循环,但我不喜欢这个解决方案;我想知道是否有另一种方法可以实现这一点,而不必使用线程来读取键盘。

最佳答案

传统方法是(最好使用sigaction())为SIGINT以及可能的其他信号建立信号处理程序。您可以为 while 循环设置一个标志,例如:

static volatile sig_atomic_t keep_looping = true;

并在您的处理程序中:

void handler(int signum) {
keep_looping = false;
}

然后在你的主程序中,只需循环:

while ( keep_looping ) { ...

这将继续下去,直到程序捕获SIGINT,设置标志,然后循环将结束,此时您可以调用deinitSystem()或其他任何东西,然后正常退出。

关于c - 如何在不使用读取器线程的情况下启用 C 应用程序的运行时命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26345289/

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