【发布时间】:2016-09-17 21:35:55
【问题描述】:
我尝试运行以下代码,第一次接收后函数一直返回0:
while (true)
{
int res = uv_run(uv_default_loop(), UV_RUN_ONCE);
if (res == 0)
printf("ok\n");
}
有没有办法重置循环,这样它会在第二次接收时返回 0 并且不会从第一次接收成功?
【问题讨论】:
标签: libuv
我尝试运行以下代码,第一次接收后函数一直返回0:
while (true)
{
int res = uv_run(uv_default_loop(), UV_RUN_ONCE);
if (res == 0)
printf("ok\n");
}
有没有办法重置循环,这样它会在第二次接收时返回 0 并且不会从第一次接收成功?
【问题讨论】:
标签: libuv
uv_run 永远返回成功
在这种情况下,0 并不意味着成功。
正如here 提到的uv_run(强调我的):
UV_RUN_ONCE:轮询 i/o 一次。请注意,如果没有挂起的回调,此函数将阻塞。 完成后返回零(没有活动的句柄或请求),如果预计会有更多回调,则返回非零(意味着您应该在将来的某个时间再次运行事件循环)。
如果存在至少一个回调,则函数调用不会阻塞,它会执行它们,然后返回。它只轮询 I/O 一次,它是为此而设计的,而您要问 - 是否有可能让它的工作方式与原本的目的不同? 嗯,不。
改用UV_RUN_DEFAULT 并在完成处理后关闭所有句柄,以便循环结束并返回函数调用。
【讨论】: