簡體   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