无论如何要避免在 libcurl 中循环监视多句柄?

anyway to avoid to loop monitor multi handle in libcurl?

我已经从 libcurl 主页上阅读了一些示例。当通过 curl_multi_perform 下载时,它总是使用 循环监控 多句柄,如下所示:

curl_multi_add_handle(multi_handle, easy_handle);
do {
    curl_multi_wait(…);
    curl_multi_perform(multi_handle, &still_running);
} while (still_running);

这让我在程序部分阻塞

我希望 libcurl 在 easy_handle 的任何人下载完成后进行回调

例如:

通常在循环中调用 curl_multi_perform 来完成所有与 curl 相关的任务,例如 http 事务。

您放置代码的方式不会实现使用 libcurl 的异步方式。有很多方法可以实现。

在典型的实现中,您将拥有主循环,您可能会在其中处理许多任务。例如

do
{
    execute task1
    execute task2
    .............
    execute taskn
}
while(condition)

在该循环中,您可以调用 curl_multi_perform.

所以主循环看起来像

do
{
    execute task1
    execute task2
    .............
    execute taskn

    curl_multi_perform(curlm, &count);
}
while(condition)

这样你就可以完成你所有的任务并且 curl_multi_perform 会不时被调用,你将实现使用 libcurl 的异步方式。

请查看文档,根据某些 return 值,您可能会避免调用 curl_multi_perform(我记得以前读过)。