簡體   English   中英

如何在異步模式下使用SIGALRM和SIGPOLL?

[英]How to use SIGALRM and SIGPOLL in asynchronous mode?

我必須異步處理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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM