簡體   English   中英

sigtimedwait和檢測信號

[英]sigtimedwait and detecting signals

我應該實現一個信號處理程序,該處理程序在第一次調用某個信號時停止程序中的所有線程,並在它們已經停止時恢復它們。 我使用以下代碼實現了在后台運行的惡魔線程:

void *handle_sig(void *arg)
{
    sigset_t set;
    //set set...

    struct timespec to;
    to.tv_sec = 1;
    to.tv_nsec = 0;

    while (_keepListening) {

        int ret = sigtimedwait(&set, NULL, &to);

        if (ret < 0)
            if (errno == EAGAIN) {
                continue; /* no signal sent*/
            } else {
                fprintf(stderr, "Failed...\n");
                exit(1);
            }

        if (_state == PAUSE_STATE) { /* was blocked*/
            //do something
        } else {
`                       //do something else
        }

    }
    return NULL;
}

問題在於,如果發送並檢測到一個信號,然后在再次進入while循環之前發送了另一個信號-第二個信號將被忽略,這可能會使程序永遠暫停。 有沒有一種方法可以檢測自上次調用sigtimedwait之后是否發送了信號?

謝謝

您可能會考慮使處理異步。

例如,通過啟動“做某事”或“做某事”的線程。

暫無
暫無

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

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