Curl легко выполнять с помощью нескольких потоков C ++ Программирование - PullRequest
0 голосов
/ 05 апреля 2019

До сих пор я успешно получал информацию от поставщика услуг. Однако мне нужно вызвать этот параллельный процесс с несколькими потоками для миллионов запросов.

Ниже приведен фрагмент кода

    size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
    {
        ((std::string*)userp)->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    int main()
    {
        CURL *curl = curl_easy_init();
        std::string readBuffer;
        if(curl) {
          CURLcode res;
          curl_easy_setopt(curl, CURLOPT_URL, "service-url");
          curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
          res = curl_easy_perform(curl);
          curl_easy_cleanup(curl);
        }
    }

Вот мои два варианта а) Один - это пул потоков (Visual studio C ++ 2010 - таким образом, нет доступа к C ++ 11) б) Использование curl_multi_perform

Когда я использую пул потоков -> Становится ли вызов curl рабочим потоком. Как сделать так, чтобы WriteCallback был специфичен для потока, чтобы никакие два потока не перезаписывали содержимое.

Если я использую curl_multi_perform, что мне нужно сделать, чтобы убедиться, что WriteCallback дает мне вывод для этого конкретного дескриптора?

1 Ответ

0 голосов
/ 05 апреля 2019

Вы можете использовать мультиинтерфейс для одновременной отправки X запросов и обработки каждого запроса при получении ответа.

Взгляните на это C Пример .

...