我有一些功课,它要求我优雅地结束程序而不显式终止,例如调用exit()或杀死线程。
但是我想不出除return 0
之外的任何其他方法,那么优雅地结束程序的方法是什么?
答案 0 :(得分:3)
杀死线程绝对不是终止程序的优雅方式。我认为你的教师意味着你所有的parent
线程都应该在他们的child
线程上等待,然后才能终止自己。
理想情况下,主线程中的显式调用pthread_exit
将确保其所有子节点在退出后继续运行。请参阅this link。但是,在退出之前等待子线程的最安全方法是使用pthread_join
。
尽管如此,exit(0)
是一个过程的优雅回报。
答案 1 :(得分:1)
我想你错过了告诉我们你有一个多线程程序。我认为优雅地终止程序的想法是通过设置标志或类似的东西来终止所有线程。然后只有在所有线程可证明结束后才终止main
。实际上你终止main
的方式并不重要。
答案 2 :(得分:0)
exit(0)
通常表示进程(您的程序)正常终止。如果出现错误,它将exit(-1)
或其他一些错误代码。
答案 3 :(得分:0)
不知道他们的优雅意味着什么,但我的第一个想法只是回归0。
或退出(0)
答案 4 :(得分:0)
请参阅my comment。
默认情况下,
main
会在缺少return 0;
语句的情况下返回 0 。
参见C99标准的第5.1.2.2.3节。
如果
main
函数的返回类型是与int
兼容的类型,则返回 对main
函数的初始调用等同于调用exit
函数,其中main
函数返回的值作为其参数;到达终止的}
main
函数返回值0
。如果返回类型与int
不兼容,则 返回到主机环境的终止状态未指定。
因此,以下内容优雅地终止,但隐含地与exit
中的显式return
或main
区别开来。
main() { }
答案 5 :(得分:0)
它们可能指的是您如何处理较低级别例程中的错误。而不是做像
这样的事情printf("ERROR: couldn't initialize the claveman\n");
exit(1);
您将从该例程返回(可能在该级别打印错误消息或等待在更高级别(如main())执行此操作。)
return CLAVEMAN_INITIALIZE_ERROR;
所有例程都会返回零表示成功或非零错误代码,直到main中的代码能够返回EXIT_SUCCESS或指示失败的错误代码。