gpt4 book ai didi

c - 如何在异步模式下使用SIGALRM和SIGPOLL?

转载 作者:行者123 更新时间:2023-11-30 18:12:12 26 4
gpt4 key购买 nike

我必须异步处理 SIGALRM 和 SIGPOLL 信号。我提出了以下建议。我不确定这是否是异步处理多个信号的正确方法。

void handle_alarm( int sig ) {    
printf("Timeout!\n");
printf("?\n");
}


struct sigaction sa;
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGPOLL);
sigaddset(&sa.sa_mask, SIGALRM);
sa.sa_handler = &handle_alarm;
//sa.sa_handler = &handle_sigpoll;
sa.sa_flags = 0;
if (sigaction(SIGPOLL, &sa, 0) == -1) {
perror(0);
printf("here\n");
exit(1);
}
if (sigaction(SIGALRM, &sa, 0) == -1) {
perror(0);
printf("here\n");
exit(1);
}

// Setup UDP Socket
sock_id = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_id<0)
perror("Error opening Socket\n");

fcntl(sock_id,F_SETOWN,getpid());
fcntl(sock_id, F_SETFL, FASYNC);

alarm(7);

我应该如何改进我的代码?抱歉,我的问题详细信息很简短。

最佳答案

您可以在信号处理函数中创建一个线程,并使用 pthread_detach 来关闭它,而不使用 pthread_join。

关于c - 如何在异步模式下使用SIGALRM和SIGPOLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252438/

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