curl_multi_perform之间的空闲线程

时间:2017-06-06 12:22:18

标签: c++ multithreading libcurl

我有一个更新线程,在其中的while循环中运行curl_multi_perform。我想确保线程不只是坐在那里旋转,所以我想将它限制为每秒几次更新。这种方法很好,除了在10+ MB文件上进行文件上传或下载时,必须连续调用curl_multi_perform以绕过上传/下载块限制。

有没有办法轮询curl_multi_perform是否需要在下一个更新循环中再次调用,或者是否可以让线程空闲约100毫秒?我认为curl_multi_wait会用于此,但是线程似乎在curl_multi_wait内部旋转CPU,所以这似乎不正确。

2 个答案:

答案 0 :(得分:0)

因此,为了将来的参考,我最终做的只是每次迭代10ms的空闲时间。当在curl.h中使用CURL_MAX_WRITE_SIZE的默认值时,这有效地将上行速度限制为1.6 mbps。为了更快的速度,我想我不得不提升CURL_MAX_WRITE_SIZE定义,或者让线程闲置一段时间。

粗伪代码:

while(runUpdateThread)
{
    curl_multi_perform(mCurlHandle, &handleCount);

    /* handle call results */

    std::this_thread::sleep_for( std::chrono::milliseconds(10) );
}

答案 1 :(得分:0)

我建议{/ 1}}而不是sleep_until用于您的应用程序:

sleep_for

现在如果上传/下载需要很长时间,using namespace std::chrono; auto next = steady_clock::now() + milliseconds{10}; while(runUpdateThread) { curl_multi_perform(mCurlHandle, &handleCount); /* handle call results */ std::this_thread::sleep_until( next ); next += milliseconds{10}; } 根本就不会睡觉。这有效地为您提供了您所追求的自动限制