Cocos2d-X多线程(4) 在子线程中进行网络请求
新版本的android系统已经不允许在UI线程中进行网络请求了,必须新建一个线程。
代码实操:
头文件:
#ifndef __TestThreadHttp_SCENE_H__
#define __TestThreadHttp_SCENE_H__
#include "cocos2d.h"
#include "network\HttpRequest.h"
#include "network\HttpClient.h"
#include "network\HttpResponse.h"
USING_NS_CC;
using namespace cocos2d::network;
class TestThreadHttp : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(TestThreadHttp);
void theadA();
void complete(HttpClient *client,HttpResponse *response);
};
#endif // __TestThreadHttp_SCENE_H__
源文件:
#include "TestThreadHttp.h"
#include <thread>
Scene* TestThreadHttp::createScene()
{
auto scene = Scene::create();
auto layer = TestThreadHttp::create();
scene->addChild(layer);
return scene;
}
bool TestThreadHttp::init()
{
if ( !Layer::init() )
{
return false;
}
std::thread t1(&TestThreadHttp::theadA,this);
t1.detach();
return true;
}
void TestThreadHttp::theadA()
{
auto request = new HttpRequest();
request->setUrl("http://httpbin.org/ip");
request->setTag("type get");
//设置请求类型
request->setRequestType(HttpRequest::Type::GET);
char data[50] = "data";
request->setRequestData(data,strlen(data));
request->setResponseCallback(CC_CALLBACK_2(TestThreadHttp::complete,this));
//创建httpclinet对象
auto client = HttpClient::getInstance();
client->setTimeoutForConnect(60);
client->setTimeoutForRead(100);
client->send(request);
request->release();
}
void TestThreadHttp::complete(HttpClient *client,HttpResponse *response)
{
log("request tag is:%s",response->getHttpRequest()->getTag());
log("response code is:%d",response->getResponseCode());
if(response->isSucceed())
{
/*std::vector<char> * data = response->getResponseData();
log("response data is:");
for (int i = 0; i < data->size(); i++)
{
log("%c",(*data)[i]);
}*/
std::vector<char> * data = response->getResponseData();
std::stringstream oss;
for (int i = 0; i < data->size(); i++)
{
oss<<(*data)[i];
}
std::string str = oss.str();
log("response data is:%s",str.c_str());
//在场景中添加精灵
auto sprite = Sprite::create("HelloWorld.png");
addChild(sprite);
Size size = Director::getInstance()->getWinSize();
sprite->setPosition(size/2);
}else
{
log("error msg is:%s",response->getErrorBuffer());
}
}
Cocos2d-X多线程(4) 在子线程中进行网络请求的更多相关文章
- iOS多线程的初步研究(五)-- 如何让NSURLConnection在子线程中运行
可以有两个办法让NSURLConnection在子线程中运行,即将NSURLConnection加入到run loop或者NSOperationQueue中去运行. 前面提到可以将NSTimer手动加 ...
- GCD多线程 在子线程中获取网络图片 在主线程更新
子线程中得所有数据都可以直接拿到主线程中使用 //当触摸屏幕的时候,从网络上下载一张图片到控制器的view上显示 -(void)touchesBegan:(NSSet *)touches withEv ...
- Android多线程之(一)View.post()源码分析——在子线程中更新UI
提起View.post(),相信不少童鞋一点都不陌生,它用得最多的有两个功能,使用简便而且实用: 1)在子线程中更新UI.从子线程中切换到主线程更新UI,不需要额外new一个Handler实例来实现. ...
- 在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
一直想写一篇关于runloop学习有所得的文章,总是没有很好的例子.游戏中有一个计时功能在主线程中调用: 1 + (NSTimer *)scheduledTimerWithTimeInterval:( ...
- android 不能在子线程中更新ui的讨论和分析
问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...
- C#多线程应用:子线程更新主窗体控件的值(一)
我记得以前写过一次关于多线程的调用及更新的文章,由于时间比较久了,现在一时没找到.在做项目的时候,用到了多线程,还是有很多的同事在问多线程更新主窗体的事情,现在就这个事情做个记录. 说起多线程之间的更 ...
- Android子线程中更新UI的4种方法
方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage ...
- (转)Android在子线程中更新Activity中UI的方法
转:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处 ...
- MFC在子线程中创建窗口(PostMessage方法)
1.创建子线程 C++创建线程的方式比较多 1)最简单易用的<thread>头文件,但是这种方法创建的子线程中无法给主线程PostMessage消息(也可能是我操作有误,总之没成功) 2) ...
随机推荐
- 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结
前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...
- Linux排查问题工具汇总
geektime专栏<linux性能优化实战>笔记 一.Linux问题排查命令 uptime top free vmstat iostat ifstat 二.Sun JDK自带工具 jps ...
- Django-多对多建表与Form表单
一.多对多建表的三种创建方式: 1.全自动型:(一般情况下使用) class Book(models.Model): title = models.CharField(max_length=32) a ...
- Django+BootstrapTable实现表格分页
models.py: from django.db import models # Create your models here. class Article(models.Model): titl ...
- Python实现PDF文件截取
python3截取PDF文件中的一部分. from PyPDF2 import PdfFileWriter, PdfFileReader # 开始页 start_page = 0 # 截止页 end_ ...
- 基于Python原生asyncio模块对DNS正向和反向的解析
一.正向解析:域名解析IP地址 import asyncio import socket domains = [ ('www.baidu.com', 'https'), ('cn.bing.com', ...
- MFC:OnCreate PreCreateWindow PreSubclassWindow
OnCreate PreCreateWindow PreSubclassWindow PreCreateWindow和PreSubclassWindow是虚函数,而OnCreate是一个消息响应函数. ...
- 窗体操作:CBrush类
CBrush画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色. 该类封装了Windows的图形设备接口(GDI)刷子.通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函数. ...
- UVA 11346 Possibility
#include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> ...
- R_Studio中对xls文件学生总成绩统计求和
我们发现这张xls表格是没有学生总分的,在xls文件中计算学生总分嫌麻烦时,可以考虑在R Studio中自定义R Script脚本来解决实际问题(计算每个学生的总成绩) .xls数据表中的数据(关键信 ...