將請求的接口的動作放在互斥鎖中進行
1:
2:
3: pthread_mutex_t mutex;
4: pthread_t thread;
5: sem_t * m_structSem;
6:
7: struct SimpleStructure
8: {
9: int data;
10: float otherData;
11: };
12:
13: void* ThreadFunction(void* arg)
14: {
15: pthread_mutex_lock(&mutex);
16: SimpleStructure* args = (SimpleStructure*)arg;
17:
18: //todo...
19:
20: delete args;
21: pthread_mutex_unlock(&mutex);
22:
23: pthread_mutex_destroy(&mutex);
24: sem_destroy(m_structSem);
25:
26: return NULL;
27: }
28:
29: pthread_mutex_init(&mutex, NULL);
30: m_structSem = sem_open(strThreadName.c_str(), O_CREAT, 0644, 0)
31:
32: //
33: SimpleStructure* args = new SimpleStructure();
34: args->data = 1;
35: args->otherData = 2.0f;
36: //
37: pthread_create(&thread, NULL, &ThreadFunction, args);
38:
39:
使用CURL(Cocos2d-x中將curl做為第三方庫加入進來,它被放在cocos2dx/platform/third-party/win32的curl目錄下)
1: CURL * curl;
2:
3: string strHtml;
4: string strRetData = "";
5:
6: //第一步:初始化CURL,取得初始化成功后的CURL指針。
7: curl = curl_easy_init();
8:
9: if (!curl)
10: {
11: return false;
12: }
13:
14: CCLOG("Http get string, conn: %s, url: %s", strConnName.c_str(), strUrl.c_str());
15:
16: curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HttpWriteString);
17: curl_easy_setopt(curl, CURLOPT_WRITEDATA, &strHtml);
18: curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);
19: curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
20:
21: //這里定義一個CURL庫中API的返回值,用於取得API調用的結果。
22: CURLcode res;
23:
24: //第二步,設定我們用此CURL指針來完成的動作。
25: //參數一為CURL指針,參數二為相應的動作類型枚舉,這個枚舉值在curl.h中定義,比如本例中的CURLOPT_URL,定義為CINIT(URL, OBJECTPOINT, 2),即聯接一個網站的HTTP服務。
26: //參數三為動作對應的數據參數,這里是網站的URL地址。
27: curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
28:
29: ///第三步,執行上面設定的動作處理。返回結果放在res中。
30: res = curl_easy_perform(curl);
31:
32: //最后一步,清除CURL指針,結束對CURL庫的使用。
33: curl_easy_cleanup(curl);
34:
35: if (res == CURLE_OK)
36: {
37: strRetData = strHtml;
38:
39: CCLOG("Http get string, conn: %s, ret: %s", strConnName.c_str(), strRetData.c_str());
40: }
41: else
42: {
43: //request error
44: }
45:
46: strRetData = "";
47:
48: CC_SAFE_DELETE(curl);
參考: