自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (6)
  • 收藏
  • 关注

原创 golang 调度之wakep和M创建

说说wakep和m的创建吧wakep调用时机和作用作用:wakep的作用是添加一个P来执行goroutinue时机:在有G变为runnable的时候 如:newproc ready wakep中调用startm来启动一个新的mstartm首先如果传递过来P是nil,则需要获取一个idle P,如果获取不到,直接返回调用mget获得一个已经睡眠m如果没有获得m,则调用newm创建一个新的

2019-04-30 08:38:41 2686

原创 golang 栈的扩大和收缩

栈扩大stack.go中的常量,用于检查goroutinue的状态 uintptrMask = 1<<(8*sys.PtrSize) - 1 // Goroutine preemption request. // Stored into g->stackguard0 to cause split stack check failure. // Must be greater

2017-04-20 16:00:04 5190

原创 golang 启动流程

找到启动函数在linux使用objdump反汇编可以看到golang编译的exe的启动代码首先使用objdump -f exe 可以看到start address 0x0808c760然后使用objdump -d exe > t.asm打开t.asm文件查找上面的start address 可以看到入口函数是_rt0_386_linux入口函数分析接下来就是找到这个入口函数了,这里因为我现在使用

2017-04-20 15:57:52 4352 2

原创 lotou详解二:service注册和单节点消息发送

代码地址lotou中通过core/handler.go来管理单机节点中注册的service注册和移除注册registerService为一个service分配一个唯一的serviceId serviceId由16的节点id和46位的本机唯一的id组成。unregisterService移除一个service,同时将serviceId写会cache。这里为了避免服务器长时间运行,频繁增删servic

2017-03-30 22:55:36 811

原创 lotou详解一:基本概念

lotou是一个基于golang的支持分布式的轻量级游戏服务器框架,主要提供游戏服务器集群的消息转发代码仓库 lotou提供了三种不同的消息发送方式: 1.Send 用于普通的消息推送,不需要返回,发送之后就不再关注 2.Request 异步非阻塞请求响应模式,request接收一个回调函数和一个超时时间,当远程服务通过respond响应或者远程服务响应超时的时候,回调函数会被唤醒。 3.

2017-03-25 23:20:23 2695

原创 7个go的基本注意事项

传递参数的时候不传递interface而传递具体类型不适用io.Writer & io.Reader, 而使用具体类型(和第一点有点重复了)传递一个很大的interface,应该传递只需要用到的interface什么时候用函数什么时候用方法:当需要状态或者修改状态的时候使用方法,如果只是逻辑,则使用函数。pointer receiver还是value receiver。指针receiver可

2017-03-12 10:06:45 657

原创 go 自己实现一个gob编解码

代码库为什么要写这么一个编解码golang内部也实现了一个gob的二进制编解码,接口简单,使用方便,但是它对interface的支持不是很好, 比如如下代码:var in []interface{} = []interface{}{1, 1.5, "abc", "123", map[int]int{1: 1, 2: 2, 3: 3}}enc.Encode(in)var out []interf

2017-03-10 16:56:20 2390

原创 go 实现一个简单的UUID生成器

查看源代码实现方法:UUID 通过三部分组成 curtime << 22 | generaterid << 12 | sequenceid具体原理如下:首先每一个UUID生成器有一个id在生成UUID的时候先取当前时间距离1970的秒数作为高位,generaterid作为中间如果本次生成的时间和上一次的时间相同,则sequenceid +1,否则sequenceid位0然后把sequenceid作为

2017-03-09 18:24:06 2735

原创 go 语言中的继承

go 语言中可以通过匿名field来实现继承的效果,type T1 struct { A int}func (t T1) Log() {}func (t *T1) Print() {}type T2 struct { T1}t2 T2{}继承效果可以通过t2.Log()直接访问T1的method,就像面向对象的继承之后一样访问,不过这里要注意的传递到Log的是T1而不是T2匿

2017-03-09 15:15:26 1301

翻译 go 用slice模拟vector功能

appendVectora = append(a, b...)copyb = append([]T(nil), a...)b = make([]T, len(a))copy(b, a)cut删除一段范围i~jcopy(a[i:], a[j:])for k, n := len(a) - j + i, len(a); k < n; k++ { a[k] = nil //or the zero

2017-02-10 11:43:46 2974

原创 go语言实现IOS OTA安装应用

现在的IOS OTA安装应用需要使用https才能安装。 要使得服务器支持https,服务器必须要有https证书。证书可以同过购买获得或者自己生成。 这里我们使用自己生成的证书,使用自己生成的证书必须在iphone上手动安装之后才能访问https服务器,否则iphone会拒绝访问未受信任的https服务器。使用openssl创建https证书生成服务器的私钥 mkdir /private/

2017-01-23 10:42:40 962

原创 cocos2dx中的class的实现以及C++的__index搜索

metatable要理解lua的class,首先要先理解metatable的作用和__index以及lua调用table里面的函数的时候搜索函数的逻辑: 1、直接当前表里面搜索函数 如果存在,直接调用,不存在继续 2、如果表里面不存在调用的函数,会查找表的metatable的__index a、如果__index是一个表,则在该表里面查找,回到第一步 b、如果__

2017-01-11 11:40:28 935

原创 cocos2dx增加front层并优先响应listener

需求在游戏中会有一些提示性的消息需要显示在UI的最上层,即使是在scene切换的时候也不能消失掉。比如当服务器推送某个消息的时候,需求一个弹窗来展示,但这个时候游戏刚好进行了scene切换,就会导致添加在上一个scene的弹窗消失掉,导致该提示消息无法展示。解决方法我们可以为看到cocos2dx中的调试时候的帧率就是一直显示,哪怕切换场景。这里也使用与之相同的方法。显示修改Director使之包含

2017-01-11 09:14:57 378

原创 go 判断一个文件是否存在

通过下面的代码可以判断一个指定的路径在系统是否存在。if _, err := os.Stat(path); err != nil { if os.IsNotExist(err) { // file does not exist } else { // other error }}

2017-01-04 09:10:08 14777

原创 go实现一个简单的游戏服务器框架(lotou)多节点

代码仓库在这个什么都流行分布式、大并发的时代,不支持点多节点也太说不过去了。 lotou的多节功能主要是建立在network和core模块之上的。 主要分为slave和master。在lotou的多节点中,有一个master和多个slave组成。因为lotou里面主要是针对服务进行通信,所以只要master和slave的主要功能就是对服务间 的消息进行转发。 基于多节点网络,lotou还实现

2016-12-22 14:30:00 1453

原创 go实现一个简单的游戏服务器框架(lotou)编码

代码仓库在lotou中实现了两种二进制编码方式。binary一种是普通的C/C++模式的小端编码方式,每一个数据都被依次编码进一个二进制流中,基本用法如下:编码 binary.Encode(v) binary.Encode(v)解码 binary.Decode(&v) binary.Decode(&v)使用非常简单,编码方式也很简单。还有一种是为了用于lotou内部通信(后面即将实现的

2016-12-12 14:53:41 1248

原创 go实现一个简单的游戏服务器框架(lotou)网络通信

代码仓库,目前代码比较粗糙,欢迎各种改进建议。 网络通信相关代码请查下以下链接(https://github.com/sydnash/lotou/tree/master/network/tcp)目前网络通信只实现了基于go的tcp的通信。go的tcp相关的主要接口net.JoinHostPort 将一个host和port组成一个合法的网络地址(host:port)net.ResolveTCP

2016-12-09 10:37:44 4455

原创 go实现一个简单的游戏服务器框架(lotou)基本设计

代码仓库,目前代码比较粗糙,欢迎各种改进建议。 以为go语言原生支持高并发(goroutine)和通信机制(channel),所以首先想到的就是使用这两个东西来构建我的消息分发机制。 核心思路:有一个core模块维护了所有的服务当有消息发送的时候,通过该core模块将消息发送到对应服务器的接收channel中服务中开一个goroutine来从channel取出消息并处理主要函数: co

2016-12-08 16:08:01 4385

原创 go实现一个简单的游戏服务器框架(lotou)起源

最近一直想学习一些关于游戏服务器的知识,显示看了一下云风的skynet框架,从而对于一个游戏服务器框架有了一个基本概要了解。先来说说我对于skynet的一些理解吧。skynet理解skynet只完成了服务器最核心的一部分功能,必须消息分发,必须服务的创建、销毁以及服务间的通信。 skynet中最核心的两个部分,网络和消息分发。消息分发skynet中有一个消息队列的队列,这个队列保存了每一个服务的消

2016-12-08 15:30:30 7051

原创 go 内置函数

go 的内置函数不拥有前面提到的go的标准类型,因此内置函数不能作为一个函数值赋值给函数类型的变量。closeclose用于关闭一个channel,使用close函数要注意以下几点:关闭一个只接受的channel会导致错误在一个已经关闭的channel上发送数据会导致panic关闭一个nil channel会导致panic在一个channel关闭之后,如果channel已经没有剩余数据等待接

2016-12-08 13:54:45 2516

原创 正则表达式*和?的一个错误认识

这两天再看go的正则表达式的时候,看到关于unicode匹配的方式\p{Name}不是很明白,所以就想写程序来尝试一下,因此而引出博文标题提到的一个误区。 首先还是先解释下\p{name}到底是什么意思。 这里的{name}指的是unicode的类型对象名称,具体可在RE2 syntax中查看。其中{Han}可以用来匹配中文字符,因此下了下面的程序来验证。package mainimport

2016-12-07 09:34:30 465

原创 go控制流和一些特殊语句

send和receive语句send、receive操作是针对channel的 send : ch <- a receive: a := <- ch++和--语句在go中++和--是一个赋值语句,而不是一个表达式因此不能像C/C++那样编写如下代码: a = b++ 同时在go中只有后置,没有前置写法。a++a--if语句ifif是编程语言中最简单的条件分支判断语句,几乎所有语言都有,所

2016-12-06 14:40:44 569

原创 GO声明和作用域

作用域go语言一共有如下几个作用域:全局作用域:所有的关键字和内置类型、函数都拥有全局作用域package作用域:一个包中声明的变量、常量、函数、类型等都拥有包作用域,在同一个包中可以任意访问文件作用域:一个文件中通过import导入的包名,只在当前文件有效函数作用域以及for、if、{}自定义作用域,函数的参数、reciever、返回值都拥有函数作用域,for、if、{}内部的变量只拥有最

2016-12-06 10:49:37 2682

翻译 go语言的type的比较和赋值

type的比较两个类型要么相同要么不相同。如果两个命名类型起源于同样的声明;一个命名类型和不具名类型永远不相同;两个不具名类型相同如果他们拥有同样的字面结构且对应成员有相同的类型。具体的规则如下:两个array type相同如果他们拥有相同的element type和同样的数组长度两个slice type相同如果他们拥有相同的element type两个struct type相同如果他们

2016-12-05 22:57:08 3142

原创 go语言基本数据类型

初识GO语言go是一门新语言,他在语言级提供了并发的支持(goroutine)和通信工具channel,同时它也是一门编译型、强类型的语言,拥有内存GC机制。程序的模块通过package来组织。GO基础整数十进制整数,使用0-9的数字表示且不以0开头。八进制整数,以0开头,0-7的数字表示十六进制整数,以0X或者是0x开头,0-9|A-F|a-f组成100 1234550100 0600

2016-12-05 15:50:48 3593 4

原创 cocos2dx-lua里面class的实现的一些问题记录和思考

首先要理解lua的class,要先理解metatable的作用和__index以及lua调用table里面的函数的时候搜索函数的逻辑:1、直接当前表里面搜索函数 如果存在,直接调用,不存在继续2、如果表里面不存在调用的函数,会查找表的metatable的__index       a、如果__index是一个表,则在该表里面查找,回到第一步       b、如果__index是一个

2016-04-14 14:41:12 3386

原创 opengl VAO and VBO

VBO用于存储顶点数据,包括顶点颜色、坐标、法线,以及顶点的indices。VAO则用于存储图形处理器将怎么使用VBO里面的数据,及顶点数据中哪些是坐标、哪些是颜色、哪些是法线等信息。之前对于这些总是不是太明白,因此我猜测也有一部分跟我一样不明白,所以我准备通过Cocos2d-x的renderer代码来说明有VAO和没有VAO的时候的区别,来加深对VAO的理解。首先我们来看初始

2015-08-08 09:29:20 5454

原创 在cocos2dx中,横版游戏关于相机移动的方式整理

在做横版游戏的时候,不可避免的要使用到相机移动,并且一般在2D横版游戏中为了能够模拟一些3D的效果,会使用分层移动的方式(即每一层的移动速度有一定的区别,以模拟3D中的物体越远移动越缓慢的效果。         在cocos2d中,提供了parallaxNode来实现不同层次有不同的移动速度的功能。这个node通过对加入的物体设置一个移动的scale来控制其移动速度,其实现原理是当对paral

2015-08-02 13:31:05 7869 1

原创 cocos2dx clippingNode的实现原理

clippingNode是利用opengl的裁剪缓冲区实现的,因为最近有使用这个功能需要,顺便把这部分实现看看了看。   opengl的裁剪主要有以下几个步骤:1、开启裁剪缓冲区2、设置裁剪缓冲区中的mask。3、正常绘制图形,这个时候会根据裁剪缓冲区的值和设置好的比较函数进行计算,根据通过与否选择是否会知道framebuffer4、绘制完成之后关闭裁剪缓冲区这几个步骤在c

2015-07-04 13:57:58 4816 6

原创 C++可变参数

这个东西很少用,每次都要到处找,所以这里做个记录。     可变参数值得是类似c语言里的printf(const char* format, ...)这样的参数,其中...表示参数个数可变。      宏也同样支持这样使用:      宏中的用法:#define LOG_OUT(format, ...) printf(format, __VA_ARGS__)   其中__VA_

2015-07-04 08:27:37 752

原创 cocos2d的armature绑定到其他armature骨骼上的bug

在armature的骨骼上可以绑定另外的armature,在我的项目中使用了该功能来完成骑乘功能,但是在使用过程发现了如下的bug,特写在这里做一下记录。首先说说cocos2dx的代码。在cocos2dx的骨骼的update函数中有如下代码用于骨骼的矩阵更新。 if (_boneTransformDirty) { if (_dataVersion >= VER

2015-06-08 22:55:16 1763

原创 cocos2d-x 3.0的clone函数

在3.0中,将使用clone函数来代替老的copy函数,在不久的将来copy函数将被删除。在使用clone的函数

2014-04-04 22:35:07 9904

原创 设计模式之abstract factory(抽象工厂)

1、意图创建一系列相关或互相依赖得对象得接口。2、参与者关系3、效果a、当提供库得时候,使用这种方式来创建对象,可以使得客户只和类得接口打交道,而隐藏其实现。b、当需要更换另一系列得产品时,只需要重新实现一个子类,并且在创建工厂实例得时候改变以下代码,其余代码都保持不变,也可以在运行状态通过一个参数来改变创建工厂实例得行为。c、保证一个应用只使用同一系列得产品,因为

2014-04-02 22:35:53 772

原创 cocos2d-x自动内存管理

cocos2d-x管理内存主要是通过如下三个函数来管理:1、retain2、release3、autorelease其中:autorelease函数是将对象加入到cocos2d-x的自动内存释放池中,然后在程序mainloop中每次循环中都会通过调用自动内存释放池的pop函数来释放管理池中引用次数只有1的对象。调用类的create函数创建对象,然后加入到au

2014-04-02 21:53:41 1077 1

原创 关于keypad_dispatcher中的dynamic_cast的问题

在CCKeypadDelegate.cpp文件中,有这样一句关于dynamic_cast的引用dynamic_cast(m_pDelegate)->release();其中,m_pDelegate的声明如下:class CC_DLL CCKeypadDelegate{public:virtual void keyBackClicked() {}virtual void

2014-04-02 08:58:28 677

原创 cocos2d-x 2.0+eclipse+winxp配置

配置cocos2d-xandroid开发环境。1、在andorid developer官网下载adt-bundle-windows-x86-20131030.zip该文件继承了eclipse和CDT  ADT以及android sdk,这个文件直接解压,不要移动解压之后的文件的位置。加压完成之后进入加压目录会有eclipse和sdk两个目录。进入eclipse目录启动ecl

2014-04-02 08:53:58 1814

原创 calcHist的使用

opencv提供了calcHist函数来计算图像直方图。         其中C++的函数原型如下:void calcHist(const Mat* arrays, int narrays, const int* channels, InputArray mask, OutputArrayhist, int dims, const int* histSize, const float**

2012-04-11 20:21:28 39470 5

原创 一种使用QThread线程的新方法QObject::moveToThread

昨晚在一个邮件列表里面看见一个关于在线程种使用signal/slot的讨论,由于回复太多,这里就不贴出原文了。        主要是关于怎样从一个线程发送信号到另外一个线程的问题。其实这个也不是什么复杂的问题,在qt的asstant里面已经描诉的比较清楚了。当我们链接信号的时候使用qt::queuedConnection就能使slot在它自己的线程里面运行。        另我惊讶的是在其

2012-04-04 17:24:11 71910 16

转载 GIT server build up

GIT server build up前几天说的任务启动了,虽然server还在采购流程中。但已经在一台PC机上搞起来,供小组内部测试啦。在此把过程记录下来吧:硬件需求:一台linux电脑,在公司局域网下有独立IP,并且保证小组每个人都能ping通;软件需求:git-core, gitosis, openssh-server, openssh-client安装git和o

2012-02-01 16:42:58 1624

原创 设置QTableView的默认行高

通过调用QTtableView的verticalHeader()->setDefaultSectionSize(15)可以设置tableview所有行的默认行高。

2012-01-16 09:26:38 15600 2

vs2008 on win7

vs2008在win7上卸载的时候不出现输入注册码的对话框,当进入到卸载页面的时候,运行该软件,即可出现输入注册码和update的按钮。

2012-11-28

OpenCV 2.0教程

一本指导使用opencv2.0的书,本书中描述了opencv2.0之后新加入的C++接口的使用。

2012-06-05

敏捷软件开发:原则、模式与实践

2003年6月荣获美国《软件开发》第13届震憾(jolt)大奖![/b][/font]   在本书中,享誉全球的软件开发专家和软件工程大师robert c.martin将向您展示如何解决软件开发人员、项目经理及软件项目领导们所面临的最棘手的问题。这本综合性、实用性的敏捷开发和极限编程方面的指南,是由敏捷开发的创始人之一所撰写的。    [b][font color="#ff6600"]特色内容:[/font][/b]    ●讲述在预算和时间要求下,软件开发人员和项目经理如何使用敏捷开发完成项目。    ●使用真实案例讲解如何用极限编程来设计、测试、量构和结对编程    ●包含了极具价值的可多次使用的C#源代码。    ●重点讲述了如何使用uml和设计模式解决面向客户系统

2011-07-01

I2C+ 协议标准中文版

I2C协议标准中文版

2011-02-15

linux设备驱动程序示例源代码

本书是经典著作《linux 设备驱动程序》的第三版。该版本已针对 linux 内核的 2.6.10 彻底更新过了。内核的这个版本针对常见任务完成了合理化设计及相应的简化,比如即插即用,利用sysfs 文件系统和用户空间交互,以及标准总线上的多设备管理等等。本书提供了完整的示例程序,不需要特殊的硬件即可编译和运行这些示例程序。本书还在单独的章节中讲述了 pci、usb 和 tty(终端)子系统。对期望了解操作系统内部工作原理的读者来讲,本书也深入阐述了地址空间、异步事件以及 i/o 等方面的内容。本书主要介绍:完整的字符、块、tty(终端)及网络驱动程序驱动程序的调试、中断、计时问题、并发、锁定和对称多处理器系统(smp)、内存管理和 dma、驱动程序模型和 sysfs、热插拔设备、对常见总线的描述,包括 scsi、pci、usb 和 ieee1394(火线)。 本资源包含了书中用到的所有示例程序

2010-12-25

数据结构与算法分析-c语言描述

书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能、效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括。由于本书选材新颖,方法实用,题例丰富,取舍得当。本书的目的是培养学生良好的程序设计技巧和熟练的算法分析能力,使得他们能够开发出高效率的程序。从服务于实践又锻炼学生实际能力出发,书中提供了大部算法的 C程序和伪码例程,但并不是全部。一些程序可从互联网上获得。

2010-12-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除