C++ потоки. Потеря данных
Есть dll с одной вызываемой функцией F()
В ней происходит, с помощью curl, POST-запрос(без обработки ответа) на некий ресурс
Проблема в следующем:
Я в приложении(игре) вызываю функцию из этого dll передав в неё некие данные.
Но во время запроса процесс повисает в ожидании ответа, что, вроде как логично.
Я попытался обернуть curl в поток, но теперь, данные передаваемые curl теряются, либо приходит мусор.
Есть подозрение, что функция F при завершении как-то убивает все данные, которые в неё были переданы; соответственно, в потоке(т.к. ссылка у данных на одну область(как я предполагаю)), они теряются. Это моё предположение.
Подскажите в чём реально может быть проблема и как её можно решить?
P.S. На сайте curl нашел инфу CURLOPT_COPYPOSTFIELDS, думал может это поможет, но нет
void curl_POST(const char* url, const char* data, char* output, int outputSize){
CURL* curl = nullptr;
CURLcode res;
curl = curl_easy_init();
if (curl) {
const char* local_buffer = data;
std::string prt = std::regex_replace(url, std::regex("\""), "\0");
curl_easy_setopt(curl, CURLOPT_URL, prt);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(data));
curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
}
}
int __stdcall F(char* output, int outputSize, const char* req, const char** args, int argsCnt)
{
std::thread ([](char* output, int outputSize, const char* req, const char** args, int argsCnt)
{
curl_POST(args[0], args[1], output, outputSize);
}, output, outputSize, req, args, argsCnt).detach();
}