繁体   English   中英

Libcurl - “curl_multi_perform”是什么

[英]Libcurl - What does "curl_multi_perform"

我试图了解 curl_multi_perform 是如何工作的。 文档说:

此 function 以非阻塞方式对所有需要注意的添加句柄执行传输。 简单句柄之前已通过 curl_multi_add_handle 添加到多句柄中。

当应用程序发现有可用于 multi_handle 的数据或超时已过时,应用程序应调用此 function 来读取/写入现在要读取或写入的任何内容等。

问题1:“应用程序应该调用”是什么意思? 应用程序如何导致某些事情? 你的意思是程序员应该打电话吗?

好的,我找到了两个简单的用法示例——“curl_multi_perform”:

1 - https://everything.curl.dev/libcurl/drive/multi

int transfers_running;
do {
   curl_multi_wait ( multi_handle, NULL, 0, 1000, NULL);
   curl_multi_perform ( multi_handle, &transfers_running );
} while (transfers_running);

2 -在此处输入链接描述

int still_running;
do {
  CURLMcode mc = curl_multi_perform(multi_handle, &still_running);
 
  if(!mc && still_running)
    /* wait for activity, timeout or "nothing" */
    mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);
 
  if(mc) {
    fprintf(stderr, "curl_multi_poll() failed, code %d.\n", (int)mc);
    break;
  }
 
/* if there are still transfers, loop! */
} while(still_running);

-首先:

  • 在第一个示例中 curl_multi_perform 在 curl_multi_wait 之后调用。
  • 在第二个例子中 curl_multi_perform 在 curl_multi_wait 之前被调用。

没有什么是清楚的。

  • 第二:

为什么我需要循环调用 curl_multi_perform? 我不明白。

为什么一个电话不够?

问题1:“应用程序应该调用”是什么意思? 应用程序如何导致某些事情? 你的意思是程序员应该打电话吗?

程序员不调用函数。 程序员编写程序来告诉计算机该做什么。 所以这意味着程序员应该编写代码告诉应用程序调用 function。

  • 在第一个示例中 curl_multi_perform 在 curl_multi_wait 之后调用。
  • 在第二个例子中 curl_multi_perform 在 curl_multi_wait 之前被调用。

任何一个命令都有效。 正如文档所说:

这个function不需要实际有数据可以读取或者可以写入数据,可以调用以防万一。

如果没有可用的东西,它会立即返回,更新transfers_running

为什么我需要循环调用 curl_multi_perform? 我不明白。

因为正在进行多个传输。 curl_multi_wait()在其中任何一个数据可用时立即返回。 处理完该数据后,您需要继续等待其他传输。

此外,这不会等待传输完成,它会在部分数据到达时对其进行处理。 因此,您必须继续调用它,直到您发送或接收所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM