【问题标题】:uv_run keeps returning success foreveruv_run 永远返回成功
【发布时间】: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


    【解决方案1】:

    uv_run 永远返回成功

    在这种情况下,0 并不意味着成功
    正如here 提到的uv_run(强调我的):

    UV_RUN_ONCE:轮询 i/o 一次。请注意,如果没有挂起的回调,此函数将阻塞。 完成后返回零(没有活动的句柄或请求),如果预计会有更多回调,则返回非零(意味着您应该在将来的某个时间再次运行事件循环)。

    如果存在至少一个回调,则函数调用不会阻塞,它会执行它们,然后返回。它只轮询 I/O 一次,它是为此而设计的,而您要问 - 是否有可能让它的工作方式与原本的目的不同? 嗯,不。
    改用UV_RUN_DEFAULT 并在完成处理后关闭所有句柄,以便循环结束并返回函数调用。

    【讨论】:

    • 您好 skypjack,感谢您的回答。我正在尝试研究 libuv,因此它最适合游戏架构。我试图在每一帧都调用它,这样它就不会阻塞 UI。这是正确的方法吗?关闭处理程序并在每一帧再次初始化它们还是有其他方法?
    • @Gabrielkotev 不,如果您打算进行长时间操作,请不要关闭它们。例如,只要您想提供服务,在端口上回显的 TCP 句柄就应该保持正常运行。我建议你阅读 libuv 的文档,一切都解释得很好。
    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 2019-11-15
    • 2011-07-25
    • 1970-01-01
    • 2012-10-02
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多