c – C libcurl,限制下载速度 – cpu使用率达到100%

前端之家收集整理的这篇文章主要介绍了c – C libcurl,限制下载速度 – cpu使用率达到100%前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有CURLOPT_MAX_RECV_SPEED_LARGE api man page的问题.

我想设置最大下载速度,所以我补充说:@H_403_3@

  1. curl_off_t max_speed = 1000*25;
  2. curl_easy_setopt(curl_handle,CURLOPT_MAX_RECV_SPEED_LARGE,max_speed);

但问题是当它达到极限(25kB / s)或我设置的时候,cpu使用率达到100%@H_403_3@

我用错了方法吗?我想,因为我没有在任何地方找到这个问题.
我试图将这两行添加到原始示例代码中,但它也很疯狂.@H_403_3@

我正在使用Windows和libcurl v 7.29@H_403_3@

谢谢@H_403_3@

可能的解决方案是编写自己的睡眠进度函数,但是……@H_403_3@

这是原始代码“getinmemory.c”,增加了我的2行:@H_403_3@

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #include <curl/curl.h>
  6.  
  7. struct MemoryStruct {
  8. char *memory;
  9. size_t size;
  10. };
  11.  
  12.  
  13. static size_t WriteMemoryCallback(void *contents,size_t size,size_t nmemb,void *userp)
  14. {
  15. size_t realsize = size * nmemb;
  16. struct MemoryStruct *mem = (struct MemoryStruct *)userp;
  17.  
  18. mem->memory =(char*) realloc(mem->memory,mem->size + realsize + 1);
  19. if(mem->memory == NULL) {
  20. /* out of memory! */
  21. printf("not enough memory (realloc returned NULL)\n");
  22. return 0;
  23. }
  24.  
  25. memcpy(&(mem->memory[mem->size]),contents,realsize);
  26. mem->size += realsize;
  27. mem->memory[mem->size] = 0;
  28.  
  29. return realsize;
  30. }
  31.  
  32.  
  33. int main(void)
  34. {
  35. CURL *curl_handle;
  36. CURLcode res;
  37.  
  38. struct MemoryStruct chunk;
  39.  
  40. chunk.memory = (char*)malloc(1); /* will be grown as needed by the realloc above */
  41. chunk.size = 0; /* no data at this point */
  42.  
  43. curl_global_init(CURL_GLOBAL_ALL);
  44.  
  45. curl_handle = curl_easy_init();
  46.  
  47. curl_easy_setopt(curl_handle,CURLOPT_URL,"http://ns223506.ovh.net/rozne/04e4383e647ce87ce42e73fa00bb0058/wallpaper-812988.jpg"); //Random wallpaper
  48. curl_easy_setopt(curl_handle,CURLOPT_WRITEFUNCTION,WriteMemoryCallback);
  49. curl_easy_setopt(curl_handle,CURLOPT_WRITEDATA,(void *)&chunk);
  50. curl_easy_setopt(curl_handle,CURLOPT_USERAGENT,"libcurl-agent/1.0");
  51.  
  52. //My added 2 lines
  53. curl_off_t max_speed = 1000*25; // 25kB/s
  54. curl_easy_setopt(curl_handle,max_speed);
  55.  
  56.  
  57. res = curl_easy_perform(curl_handle);
  58.  
  59. if(res != CURLE_OK) {
  60. fprintf(stderr,"curl_easy_perform() Failed: %s\n",curl_easy_strerror(res));
  61. }
  62. else {
  63. printf("%lu bytes retrieved\n",(long)chunk.size);
  64. }
  65.  
  66. curl_easy_cleanup(curl_handle);
  67.  
  68. if(chunk.memory)
  69. free(chunk.memory);
  70.  
  71. curl_global_cleanup();
  72.  
  73. return 0;
  74. }

解决方法

好问题解决

它只出现在版本curl-7.29.0-devel-mingw32中!@H_403_3@

版本@H_403_3@

> curl-7.26.0-devel-mingw32
> curl-7.31.0-devel-mingw32@H_403_3@

没关系@H_403_3@

之前我测试过另一个版本,但我没有将dll复制到正确的文件夹中,我没有使用curl_version()直接在程序中检查;对不起:(@H_403_3@

猜你在找的C&C++相关文章