cocos2d-x中的curl

将请求的接口的动作放在互斥锁中进行

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);

参考:

How to use pthread

cocos2d-x中的CurlTest深入分析

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王清培的专栏

Redis 数据结构与内存管理策略(下)

Redis 数据结构与内存管理策略(下) 标签: Redis Redis数据结构 Redis内存管理策略 Redis数据类型 Redis类型映射 作者:王清培...

33380
来自专栏c#开发者

如何给DataGrid添加自动增长列

如何给DataGrid添加自动增长列 我想我们都知道在数据库中如何添加自增长列,我们可以将这个自增长列绑定到DataGrid上使得用户方便的知道现在是第几行,今...

440100
来自专栏乐百川的学习频道

Vert.x学习笔记(二) Vert.x Web Client

本文参考自Vert.x Web Client官方文档。套用官网的话来说, Vert.x Web Client是一个异步的HTTP和HTTP/2网络客户端。 ...

52260
来自专栏Golang语言社区

关于JSON.stringify和Unicode编码,需要注意的几点

1JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码 2浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转...

41140
来自专栏大内老A

WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘

通过《再谈IIS与ASP.NET管道》的介绍,相信读者已经对IIS和ASP.NET的请求处理管道有了一个大致的了解,在此基础上去理解基于IIS服务寄宿的实现机制...

22290
来自专栏微服务

ASP.NET Core 依赖注入

一、什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(...

32280
来自专栏Golang语言社区

关于JSON.stringify和Unicode编码,需要注意的几点

1JSON.stringify会自动把所要转换内容中的汉字转换为Unicode编码 2浏览器间有差别,个别浏览器会把将要提交表单内容中的Unicode编码自动转...

41680
来自专栏张善友的专栏

HTML生成PDF(c#)

Calling wkhtmltopdf to generate PDF from HTML 老外最多人加分的那篇做法,使用wkhtmtopdf(GPL协议)可以...

247100
来自专栏Porschev[钟慰]的专栏

【2013年】开发常见问题回顾(一)

记录开发中遇到的和别人问的较多的问题.... IE10中LinkButton不可用     这应该是2013年初遇到的一个BUG,当使用Asp.Net开发Web...

29250
来自专栏博客园

持久化方式

HttpContext抽象提供了一个简单的IDictionary<Object,Object>类型的字典集合,叫做Items。在每个请求中,这个集合从HttpR...

12720

扫码关注云+社区

领取腾讯云代金券