2016-09-17 113 views
1

我试图运行下面的代码和功能保持第一后返回0,得到:uv_run保持成功返回永远

while (true) 
{ 
    int res = uv_run(uv_default_loop(), UV_RUN_ONCE); 
    if (res == 0) 
     printf("ok\n"); 
} 

有没有一种方法来重置循环,所以它会在返回0第二次接收并不会因第一次成功而停滞不前?

回答

1

uv_run保持成功返回永远

在这种情况下,0并不意味着成功
如前所述hereuv_run(重点煤矿):

UV_RUN_ONCE:轮询I/O一次。请注意,如果没有待处理的回调,此功能会被阻止。 完成时返回零(没有活动的句柄或请求离开),或者如果期望有更多的回调(意味着您应该在将来某个时候再次运行事件循环)则返回非零值。

如果至少有一个回调函数调用不会被阻塞,并且它会执行它们,那么它将返回。它仅对I/O进行一次轮询,这是为了这个目的,你问 - 是否有可能使它的工作方式与它的意义不同?嗯,没有。
改为使用UV_RUN_DEFAULT,并在完成处理后关闭所有句柄,以便循环结束并返回函数调用。

+0

你好skypjack,谢谢你的回答。我正在研究libuv,因此它最适合游戏架构。我试图把它称为每帧,所以它不会阻止用户界面。这是正确的方法吗?关闭处理程序并每隔一帧再次初始化它们或者有其他方法? –

+0

@Gabrielkotev不,如果你打算长时间操作,不要关闭它们。作为一个例子,只要你想提供服务,一个在端口上回声的TCP句柄应该保持运行。我建议你阅读libuv的文档,一切都很好解释。 – skypjack