我尝试运行以下代码,并且该函数在第一次接收后继续返回0:
while (true)
{
int res = uv_run(uv_default_loop(), UV_RUN_ONCE);
if (res == 0)
printf("ok\n");
}
有没有办法重置循环,以便它在第二次接收时返回0,并且不会从第一次接收成功?
答案 0 :(得分:1)
uv_run永远让你的成功回归
在这种情况下,0并不代表成功
如上所述uv_run
UV_RUN_DEFAULT
(强调我的):
UV_RUN_ONCE:轮询i / o一次。请注意,如果没有挂起的回调,此函数将阻止。 完成后返回零(没有活动句柄或请求),如果预期会有更多回调,则返回非零值(意味着您应该在将来的某个时间再次运行事件循环)。
如果至少存在一个回调,则函数调用不会阻塞并执行它们,然后它将返回。它仅针对I / O进行一次轮询,它就是为了这个而且你要问 - 它是否可能使它的工作方式不同于它的意思?嗯,没有。
改为使用entry_func
并在完成后关闭所有句柄,以便循环结束并返回函数调用。