我有一个更新线程,在其中的while循环中运行curl_multi_perform。我想确保线程不只是坐在那里旋转,所以我想将它限制为每秒几次更新。这种方法很好,除了在10+ MB文件上进行文件上传或下载时,必须连续调用curl_multi_perform以绕过上传/下载块限制。
有没有办法轮询curl_multi_perform是否需要在下一个更新循环中再次调用,或者是否可以让线程空闲约100毫秒?我认为curl_multi_wait会用于此,但是线程似乎在curl_multi_wait内部旋转CPU,所以这似乎不正确。
答案 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};
}
根本就不会睡觉。这有效地为您提供了您所追求的自动限制。