gpt4 book ai didi

linux - 多线程环境 - 类 UNIX 环境中的 C++ 信号处理(freeBSD 和 linux)

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:06 26 4
gpt4 key购买 nike

我写了一个网络数据包监听程序,我有2个线程。两者都会永远运行,但其中一个休眠 30 秒,另一个休眠 90 秒。在主函数中,我使用 sigaction 函数,在安装信号处理程序后,我创建了这两个线程。创建线程后,main函数调用pcaploop函数,这是无限循环。我的程序的基本结构:(我使用伪语法)

signalHandler()  
only sets a flag (exitState = true)

thread1()
{
while 1
{
sleep 30 sec
check exit state, if so exit(0);
do smth;
}
}

thread2()
{
while 1
{
sleep 90 sec
check exit state, if so exit(0);
do smth;

}
}

main()
{
necassary snytax for sigaction ;
sigaction( SIGINT, &act, NULL );
sigaction( SIGUSR1, &act, NULL );

create thread1;
create thread2;

pcaploop(..., processPacket,...); // infinite loop, calls callback function (processPacket) everytime a packet comes.

join threads;
return 0;

}

processPacket()
{
check exitState, if true exit(0);
do smth;
}

这是我的问题。当我按 CTRL-C 时,程序不会终止。如果程序运行时间少于 6-7 小时,当我按 CTRL-C 时,程序将终止。如果程序运行 1 个晚上,至少 10 小时或更长时间,我无法终止该程序。实际上,信号处理程序没有被调用。

可能是什么问题?哪个线程捕获信号?

最佳答案

基本上,最好删除您在示例中放入的所有伪代码,并保留最少的工作代码,即您所拥有的代码。

到目前为止,从您的示例中我可以看到,缺少 sigaction 的错误处理。

尝试检查代码中的错误。

关于linux - 多线程环境 - 类 UNIX 环境中的 C++ 信号处理(freeBSD 和 linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26031797/

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