我已经在互联网上搜索了一段时间,找到了不同的解决方案,但后来都没有真正起作用,或者对我的使用来说太复杂了。直到 2 年前我才使用 C++,所以它可能有点生疏:D
我目前正在编写一个将数据发布到 URL 的程序。它只发布数据,没有别的。为了发布我使用 curl 的数据,但它阻塞了主线程,当第一个帖子仍在运行时,将会有第二个帖子应该开始。最终,大约有 5-6 个后期操作同时运行。
现在我想将带有 curl 的帖子推送到另一个线程中。每个帖子一个线程。线程应该获取一个字符串参数,其中包含要推送的内容。
我目前坚持这一点。尝试了 Windows 的 WINAPI,但在读取参数时崩溃。(在我的示例中,第二个线程仍在运行,而主线程结束(等待系统(“暂停”))。
有一个多平台解决方案会很好,因为它可以在 windows 和 linux 下运行!
这是我当前的代码:
#define CURL_STATICLIB
#include <curl/curl.h>
#include <curl/easy.h>
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#if defined(WIN32)
#include <windows.h>
#else
//#include <pthread.h>
#endif
using namespace std;
void post(string post) { // Function to post it to url
CURL *curl; // curl object
CURLcode res; // CURLcode object
curl = curl_easy_init(); // init curl
if(curl) { // is curl init
curl_easy_setopt(curl, CURLOPT_URL, "http://10.8.27.101/api.aspx"); // set url
string data = "api=" + post; // concat post data strings
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str()); // post data
res = curl_easy_perform(curl); // execute
curl_easy_cleanup(curl); // cleanup
} else {
cerr << "Failed to create curl handle!\n";
}
}
#if defined(WIN32)
DWORD WINAPI thread(LPVOID data) { // WINAPI Thread
string pData = *((string*)data); // convert LPVOID to string [THIS FAILES]
post(pData); // post it with curl
}
#else
// Linux version
#endif
void startThread(string data) { // FUnction to start the thread
string pData = data; // some Test
#if defined(WIN32)
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread, &pData, 0, NULL); // Start a Windows thread with winapi
#else
// Linux version
#endif
}
int main(int argc, char *argv[]) {
// The post data to send
string postData = "test1234567890";
startThread(postData); // Start the thread
system("PAUSE"); // Dont close the console window
return EXIT_SUCCESS;
}
有人建议吗?
谢谢您的帮助!