[英]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.