我正在学习libev
。
但我不了解ev_default_fork
的{{1}}标志。
这是一个近在咫尺的问题吗?像ev_loop
标志一样吗?
什么时候我需要设置旗帜?哪种情况下这个标志是必要的?
这是对doc的描述:
此函数设置一个标志,该标志会导致后续的ev_loop迭代 重新初始化具有一个后端的内核状态。尽管 那么,你可以随时调用它,但之后最有意义 分叉,在儿童过程中(或儿童和父母,但再次 做得很少)。在使用任何之前,您必须在孩子中调用它 libevfunctions,它只会在下一个ev_loop生效 迭代。
另一方面,你只需要调用此函数 childprocess当且仅当您要在中使用事件库时 儿童。如果只是fork + exec,你根本不需要调用它。
功能本身非常快,通常也不是问题 callit以防万一。为了简化这个功能,该功能将会 很好地适应了对pthread_atfork的调用:pthread_atfork(0, 0,ev_default_fork);
答案 0 :(得分:2)
那么请阅读文档,在fork()
之后调用孩子中的函数,最好是你做的第一件事。所以你的代码应该是这样的:
switch (fork()) {
case -1:
/* everything's gone pear-shaped */
default:
/* i am the parent */
...
break;
case 0:
/* i am the child */
ev_loop_fork(EV_DEFAULT);
...
break;
}