c++ - sigwait()在多线程程序中不起作用

标签 c++ multithreading signals

我正在尝试编写一个多线程程序,其中一个线程(下面的可变线程)负责可能设置为此进程的任何异步信号。

我面对使用sigwait()但不响应已发送给进程的任何信号的线程。 (例如下面的SIGUSR1)。

static void * signal_thread(void *arg = nullptr)
{
    int sig = -1;
    sigset_t sigset;
    sigfillset(&sigset);
    pthread_sigmask(SIG_BLOCK, &sigset, NULL);
    while(1)
    {
       int s = sigwait(&sigset, &sig);
       if(s == 0)
          printf("SIG %d recieved!...\n", sig);
       usleep(20);
    }
}

int main()
{
    sigset_t signalset;
    pthread_t thread;
    pthread_create(&thread, NULL, &signal_thread, nullptr);
    sigfillset(&signalset);
    pthread_sigmask(SIG_BLOCK, &signalset, NULL);

    while(1)
    {
       raise(SIGUSR1);
       usleep(20);
    }
}

最佳答案

该问题涉及两个问题:

首先,对主发送信号的调用仅向主线程发送而不是整个过程。

其次,应使用std::cout代替signal_thread中的printf。

关于c++ - sigwait()在多线程程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60133787/

相关文章:

c++ - 行专业和列专业有什么区别?

c++ - 我可以在 C++ 中返回一个跨度吗?如果是这样,如何? (对替代品持开放态度。)

c# - Monitor.Pulse 的目的

在 C 中捕获信号并杀死所有 child

c++ - 为什么它是使用 GCC 的模糊函数调用?模板推导失败?

compact-framework - XBox 360 上是否有适用于 XNA 的良好信号量?

java - 所有任务完成后spring boot应用程序不退出

python - 线程时如何中断 Python I/O 操作?

python - 如何检查子进程是否在Windows上被信号杀死

c++ - C中二维数组声明的歧义