【发布时间】:2011-08-28 02:50:03
【问题描述】:
我尝试使用 CURL 库实现多线程下载。
我准备了 N 个线程(下载不同范围的简单句柄)并调用 curl_multi_perform(multiHandle, &running) 之后。
我的问题
- 如何检查特定线程(添加到多句柄)现在是否正在下载?我没有找到任何选项。
- 如果特定线程完成下载,它必须重新建立连接并继续下载另一个范围。可以吗?
【问题讨论】:
我尝试使用 CURL 库实现多线程下载。
我准备了 N 个线程(下载不同范围的简单句柄)并调用 curl_multi_perform(multiHandle, &running) 之后。
我的问题
【问题讨论】:
libcurl 多接口不是线程化的。它在同一个线程中进行并行传输!
您可以随时向多手柄添加简单手柄。只需调用curl_multi_perform() 然后它就会驱动所有添加的简单句柄。您也可以随时移除句柄。
您应该使用curl_multi_info_read() 来确定哪些句柄已完成。在它们完成之前,您可以考虑使用它们。如果您想将一个简单的句柄放回多句柄以进行另一次传输,只需将其从句柄中移除(可能设置新选项)并重新添加即可。
另请参阅http://curl.se/libcurl/c/example.html 以获取大量 libcurl 示例,包括使用多接口的一堆。通用的多界面“教程”样式文档在这里:http://curl.se/libcurl/c/libcurl-multi.html
【讨论】: