无限循环,直到应用程序获得信号

时间:2011-05-23 13:39:42

标签: c++ c multithreading

我有一个启动5个线程的应用程序。

启动这些线程后,main()中没有任何反应。

main(){
      `start thread 1..5
}

如何在main()中无限循环,以便我的程序将持续运行,直到它获得信号。

我不想使用

while(true)
因为它会占用CPU周期。 (我认为)

编辑: 我正在使用gcc 4 线程Api:pthread 操作系统:Linux

5 个答案:

答案 0 :(得分:4)

最简单的是:

while (true) sleep(1000);

最好的是 join()所有五个帖子。

答案 1 :(得分:3)

sigsuspend()函数就是为了这个目的而设计的 - 它将挂起调用线程,直到它收到一个导致调用信号处理程序的信号。

为避免竞争条件(信号在您的进程调用sigsuspend()之前到达),您应该阻止信号,检查信号,然后将掩码传递给sigsuspend()解除阻塞:< / p>

/* Block SIGUSR1 */
sigset_t sigusr1set, origset;
sigemptyset(&sigusr1set);
sigaddset(&sigusr1set, SIGUSR1);
sigprocmask(SIG_BLOCK, &sigusr1set, &origset);

/* Set up threads etc here */

/* Unblock SIGUSR1 and wait */
sigdelset(&origset, SIGUSR1);
sigsuspend(&origset);

答案 2 :(得分:1)

加入这些主题,请参阅pthread_join

答案 3 :(得分:1)

您可以尝试Boost::Synchronization功能,如下所示:

main(){
  `start thread 1..5
  wait for signal
  exit
}

答案 4 :(得分:1)

窗?使用WaitForMultipleObjects