如何保持进程运行?
问题描述:
我有启动多个线程里面做一些东西,听一些港口等处理如何保持进程运行?
后,它开始的所有线程,主线程目前进入一个无限循环:
它是这样的:
int main()
{
//start threads
while (true)
{
sleep(1000);
}
}
额外sleep
保证了主线程不吃处理器。
是这种方法好不好?是否有一个关于流程如何保持活力的行业标准?谢谢。
编辑:一些澄清:
- 线程是听众,所以
join
或WaitForSingleObject
是不是一种选择。通常我可以在这里使用连接,但线程由第三个客户端库启动,我无法控制它们。 - 在主线程做一些处理不从设计的角度来看是有意义的。
答
我不认为有行业标准。
你有什么是运行在主线程的一个完全可以接受的。但是,您可能想要包含一种突破循环的方法。
其他方法包括:
- 等待所有工作线程使用
join
命令来完成。 - 等待在其中可以被用信号通知给退出循环的主线程的
event
。 - 使用主线程完成当前由工作线程完成的一些处理。
- 定期检查布尔标志以决定是否退出。
在这一天结束,这取决于您的具体要求。
答
我建议你有你的主线程等待别人的终止:
int main() {
// start threads
for(thread *t : threads) {
join(t);
}
// finalize everything or restart the thread
return 0;
}
如果您使用POSIX线程,pthread_join
功能会做到这一点。
+0
查看编辑的问题。 – AMCoder
答
。从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;
}
这样,主进程将退出,子进程将产生线程,这将做的工作。最后,子进程将在退出之前等待这些线程完成。
你需要一种方法来打破主循环? – Nick
为什么加入一个线程不是一个选项?在所有其他线程完成之前,您只是不想退出主线程。调用所有的tid加入将会做到这一点。 – Stan
发生什么事情与所有downvoting?!? – Nick