2012-05-01 46 views
3

我有启动多个线程里面做一些东西,听一些港口等处理如何保持进程运行?

后,它开始的所有线程,主线程目前进入一个无限循环:

它是这样的:

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

额外sleep保证了主线程不吃处理器。

是这种方法好不好?是否有一个关于流程如何保持活力的行业标准?谢谢。

编辑:一些澄清:

  • 线程是听众,所以joinWaitForSingleObject是不是一种选择。通常我可以在这里使用连接,但线程由第三个客户端库启动,我无法控制它们。
  • 在主线程做一些处理不从设计的角度来看是有意义的。
+0

你需要一种方法来打破主循环? – Nick

+3

为什么加入一个线程不是一个选项?在所有其他线程完成之前,您只是不想退出主线程。调用所有的tid加入将会做到这一点。 – Stan

+0

发生什么事情与所有downvoting?!? – Nick

回答

1

我不认为有行业标准

你有什么是运行在主线程的一个完全可以接受的。但是,您可能想要包含一种突破循环的方法。

其他方法包括:

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

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

+0

为什么downvote? – Nick

+0

请参阅编辑的问题(我没有downvote) – AMCoder

+0

如果你想要做的就是让线程运行,那么你有什么没有错。如果您想要一种干净地退出(即不通过进程终止)的方式,那么您将需要一种方法来实现当前解决方案所不具备的功能。 – Nick

2

我建议你有你的主线程等待别人的终止:

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

如果您使用POSIX线程,pthread_join功能会做到这一点。

+0

查看编辑的问题。 – AMCoder

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; 
} 

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

+0

+1:除了O.P.在谈论'WaitForSingleObject'时,他建议他在Windows平台上。 – Nick

+0

@尼克你是对的,我应该注意到。我猜想类似的事情可以用CreateProcess来完成,但我会把它留给其他人:-) – Stan