[英]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? 我不明白。
為什么一個電話不夠?
問題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.