我有一个启动多个线程的进程,这些线程执行某些操作,侦听某些端口等等。
启动所有线程后,主线程进入无限循环:
它类似于:
int main()
{
//start threads
while (true)
{
sleep(1000);
}
}
额外sleep
确保主线程不会占用处理器。
这种方法可以吗?关于流程如何保持活力,是否存在行业标准?感谢。
编辑:一些澄清:
join
或WaitForSingleObject
不是选项。通常我可以在这里使用join,但线程是由第三个客户端库启动的,我对它们没有任何控制权。答案 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
可以发出信号以退出循环。在一天结束时,这取决于您的具体要求。