带有进度表的 curl 多接口程序
curl multi interface program with progress meter
我遇到了这个例子,它演示了 curl 多接口来下载单个文件。 卷曲多单。我已将此代码添加到我的程序中。我的要求如下。
我想下载并上传文件,并且在下载/上传文件时,我希望屏幕上显示平均上传/下载速率。
我最初使用 curl 简单界面,只需一次调用
curl_easy_perform
.由于这是同步/阻塞,因此我无法让屏幕更新线程更新屏幕上的速率。
这是我切换到 curl 多接口的驱动器。因为它没有阻塞(切换到 curl 多接口后,我发现屏幕更新没有发生。卷曲多接口是否有望对我的情况有所帮助。您是否可以建议任何其他解决方案。
这是我代码的相关部分。
curl_multi_add_handle(m_multiCurl, m_curl);
curl_multi_perform(m_multiCurl, &stillRunning);
while(stillRunning) {
CURLMcode mc;
int numFds;
mc = curl_multi_wait(m_multiCurl, NULL, 0, 1000, &numFds);
if(mc != CURLM_OK) {
m_logger->errorf("curl_multi_wait() failed, code %d.n", mc);
break;
}
if(!numFds) {
repeats++;
if(repeats > 1) {
WAITMS(100);
}
} else {
repeats = 0;
}
curl_multi_perform(m_multiCurl, &stillRunning);
}
稍微违反直觉的是,您需要设置每个简单手柄的CURLOPT_NOPROGRESS(为零(,以获得每个简单手柄的进度表输出。请参阅下面的示例。
但是,我认为这是一个相当重要的问题,但是,当您同时进行多个传输时,每次传输输出内置进度表可能不是您想要的。
在任何时候进行多个传输时,我想您要做的是实现CURLOPT_XFERINFOFUNCTION回调并实现您自己的进度表,该进度表可以以一种很好的方式同时显示所有传输的进度。
CURLOPT_NOPROGRESS示例:
CURL *curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
/* enable progress meter */
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
/* Perform the request */
curl_easy_perform(curl);
}
相关文章:
- 带有进度表的 curl 多接口程序
- 使用没有堆内存分配的接口的框架应用程序?
- 在C LIB和程序中具有相同接口的类.EXE版本是
- 将C 应用程序(无接口,仅算法)移植到Android
- 使用Microsoft安全支持提供程序接口 (SSPI) 对消息进行加密和签名
- Create_task():称为“接口”的应用程序,该接口已编辑为其他线程进行编组
- 在没有包装程序类的情况下,在ActiveX接口上调用方法
- QT应用程序接口冻结
- 在自定义 C/C++ 程序中获取 PPP0 接口 Tx/Rx 字节的最简单方法是什么?
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 创建 COM 接口指针在开发计算机上有效,但会导致其他计算机上的应用程序崩溃
- 为什么C++应用程序不能创建像php,html和css这样的接口?
- 在主应用程序中声明的 dll 中实现接口 - C++
- MFC功能区接口在本地化应用程序时发出断言失败
- 我的C++应用程序如何调用驱动程序的接口
- 编译C++使用SWI-Prolog接口的程序
- 我可以在Qt应用程序中使用现有的本机Windows COM接口吗
- 安装程序设备接口错误 259 用于显示
- C++程序在调用C#接口时接收HOST_E_CLRNOTAVAILABLE
- 如何从其他命令行接口程序获得输出