如何保持进程运行?

时间:2012-05-01 07:48:34

标签: c++ coding-style process

我有一个启动多个线程的进程,这些线程执行某些操作,侦听某些端口等等。

启动所有线程后,主线程进入无限循环:

它类似于:

int main()
{
   //start threads
   while (true)
   {
      sleep(1000);
   }
}

额外sleep确保主线程不会占用处理器。

这种方法可以吗?关于流程如何保持活力,是否存在行业标准?感谢。

编辑:一些澄清:

  • 线程是侦听器,因此joinWaitForSingleObject不是选项。通常我可以在这里使用join,但线程是由第三个客户端库启动的,我对它们没有任何控制权。
  • 从设计的角度来看,
  • 在主线程中进行一些处理是没有意义的。

3 个答案:

答案 0 :(得分:3)

。部分取自Linux Daemon Writing HOWTO,我假设你想要这样的东西:

int main() {
    pid_t pid;

    /* Fork off the parent process */       
    pid = fork();
    if (pid < 0) {
            exit(EXIT_FAILURE);
    }
    /* If we got a good PID, then
       we can exit the parent process. */
    if (pid > 0) {
            exit(EXIT_SUCCESS);
    }
    // now start threads & do the work

    for( thread *t : threads ) {
            join( t );
    }

    return 0;
}

这样主进程将退出,子进程将生成将执行工作的线程。最后,子进程将在退出之前等待这些线程完成。

答案 1 :(得分:2)

我建议你让你的主线程等待其他人的终止:

int main( ) {
  // start threads
  for( thread *t : threads ) {
    join( t );
  }
  // finalize everything or restart the thread
  return 0;
}

如果您正在使用POSIX线程,pthread_join函数将执行此操作。

答案 2 :(得分:1)

我不相信有行业标准

您拥有的是一种完全可以接受的运行主线程的方法。但是,您可能希望包含一种突破循环的方法。

其他方法包括:

  • 使用join命令等待所有工作线程完成。
  • 等待主线程中的event可以发出信号以退出循环。
  • 使用主线程执行当前由工作线程完成的一些处理。
  • 定期检查布尔标志以决定是否退出。

在一天结束时,这取决于您的具体要求。