自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

噬日者

Eclipser : 吞噬sun ...

  • 博客(244)
  • 资源 (1)
  • 收藏
  • 关注

原创 程序中,嵌套依赖静态链接库和动态链接库

静态链接库    LIB   A   有函数 f,打印 1动态链接库    DLL  B   B依赖静态链接库A程序              EXE  C   C依赖静态库A,执行f.打印1. 程序C进入SLEEP此时,重新编写静态链接库A 修改 f,打印 2,并且编译依赖最新静态链接库的动态链接库B.完毕后,程序C SLEEP完毕,C程序加载动态链接库B,再次执行f.请问打印内

2014-06-13 17:19:50 2386

原创 golang指针的使用,类似C语言

srcsrc\main\main.gosrc\model\model.gopackage modelimport "strconv"type User struct { username string password string age int32}func (this *User) String() string { return "username: "

2014-05-17 14:07:58 5544

原创 golang select 选择器的两种方案

golang select 选择器常规模式:

2014-05-17 11:37:50 14944 1

原创 C++11 std::bind std::function 高级用法

C++11 std::bind std::function 高级用法

2014-04-24 13:11:28 51940 5

原创 C++实现golang chan 版本一

这是我的一个简单例子,目前不够完善。需要

2014-04-22 19:51:50 3151

原创 DynamicLinkLibraryAPI

#pragma once#if defined(WIN32) || defined(WIN64)#include typedef HINSTANCE DLLHANDLER;#elif defined(__linux__)#include typedef void* DLLHANDLER;#endifnamespace dll { // 打开动态链接库。bool OpenD

2014-04-17 13:22:02 1885

原创 C++11 lambda 快速理解

lambda 匿名函数现阶段,编译器会将lanmbda匿名函数,转换为仿函数!故,stl算法完全可以使用lambda匿名函数。auto b2 = [a, &b] (int c) -> int{ // a只读, b读写    b = a + c;    return a + c;}(1000);[var]   传值方式(只读)将变量传递到匿名函数中[=]

2014-02-18 21:25:55 5426

原创 C++11 nullptr的意义

#include void f(int) { std::cout << "int" << std::endl;}void f(char*) { std::cout << "char*" << std::endl;}/* * */int main(void) { f(0); f(NULL); f(nullptr); retur

2014-02-18 15:50:08 1215

原创 C++11 遍历

/* * File: main45.cpp * Author: Vicky.H * Email: eclipser@163.com */#include #include #include void f1(int& i) {i *= 2;}void f2(int& i) {std::cout << i << std::endl;}/* * */int ma

2014-02-13 11:24:11 7139

原创 C++11 追踪返回类型

首先,我们先掌握C++11对泛型的支持:decltype RTTI    int z = 0;    decltype(z) x = 100;    std::cout     float a = 1.0;    double b = 2.0;    decltype(a + b) c = a + b;    std::cout

2014-02-13 10:58:09 1944

转载 C++11实现golang的defer类似Java finally操作。

// Copyright 2013 . All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.#ifndef _DEFER_H_#define _DEFER_H_#include #includ

2014-01-20 17:05:28 3399 1

原创 C++简单封装共享内存

目前代码只考虑linux环境,win32将随后补充:Assertx.h/* * File: Assertx.h * Author: Vicky.H * Email: eclipser@163.com * * Created on 2014年1月16日, 下午8:33 */// 断言#ifndef CN_VICKY__ASSERTX_H#define CN_

2014-01-20 13:36:05 7308 1

原创 go hot update (1)

package mainimport ( "net" "reflect" "fmt" "os")func main() { listener, _ := net.Listen("tcp", ":8000") for { c , _ := listener.Accept() go connHandler(c) }}func connHandler(c net.

2014-01-02 21:37:13 1536

原创 go语言RPC

RPC remote procedure call,远程过程调用。go语言对RPC的支持有以下要求:1.以对象形式注册RPC2.RPC函数必须是对象的公共函数。public,也就是首字母大写的函数3.RPC函数必须有2个参数,类型为公共类型,或go内嵌类型。4.RPC函数第2个参数作为返回值,必须是指针类型。5.RPC函数必须返回一个error类型的值。func

2013-12-31 16:17:06 6104

原创 go语言与excel的序列化与反序列化(1)

很多时候,尤其是游戏开发中,策划往往将文档,数据等写入excel中,程序,需要通过各种方式解析excel,让程序可以读。常见的方案有:1.将excel转换为csv,逗号分割方式,程序通过split逗号按照特定格式进行转换。(功能不够强大,格式要求很严,无法灵活配置很多特殊的功能)2.将excel转换为lua table。这是C++游戏开发的常用方式。 (无法通过c++对象序列化为exc

2013-12-30 22:17:18 4130

转载 安装openssl错误解决

安装openssl错误解决1.nmake -f ms\ntdll.mak在这一步出错        cl /Fotmp32dll\cryptlib.obj -Iinc32 -Itmp32dll /MD /Ox /O2 /Ob2 -DOPENSSL_THREADS -DDSO_WIN32 -W3 -WX -Gs0 -GF -Gy -nologo -DOPENSSL

2013-12-26 17:38:51 9033

原创 go语言chan 和 routine活用

这里,我们以游戏中的一个情况为例。比如魔兽世界里的40人团队副本BOSS战,很多玩家同时攻击BOSS,BOSS的血量会进行平凡修改,我们要记录对BOSS的致命一击。常规 对BOSS血量的操作经行加锁,然后修改,每次攻击甚至还会判断怪物是否处于死亡状态以判断客户端是否能施放某个技能,但这样会让一个锁控制40个玩家的攻击操作,会导致攻击,技能等释放的不流畅。所以魔兽世界应该不是采用这种加锁的方式。为什

2013-12-23 14:25:25 13002 1

原创 go语言变参,匿名函数的多种用法

/** * Created by Administrator on 13-12-18. */package mainimport ( "fmt" "os")func f1(args ...interface {}) { f2(args...) f2(args[1:]...)}func f2(args ...interface {}) { for i, v := ra

2013-12-18 15:49:30 13618 1

原创 go语言string遍历细节

/** * Created by Administrator on 13-12-18. */package mainimport ( "fmt" "os")func main() { str := "hello, 世界" n := len(str) for i := 0; i < n; i++ { fmt.Fprintf(os.Stdout, "%d %v %

2013-12-18 14:24:37 4469

转载 Linux tcpdump命令详解

简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 实用命令实例默认启动tc

2013-12-16 17:32:51 908

原创 go语言使用protobuf与c++做数据通信。

go语言使用protobuf与c++做数据通信。

2013-12-16 16:52:22 10267

原创 关于云服务器

刚才和以前同学,聊到云服务器,分布式计算的问题。现在他用的hadoop的mapreduce。说实话hadoop的大名我的确有所耳闻。但可能处于某种偏执,我还是认为go语言是分布式,云计算的最佳选择。一个go语言分布式计算的雏形:可以用于理解chan,gorutinue,for,select的基础用法/** * Created by Administ

2013-12-11 15:11:02 1130

原创 go net 包详解1

/** * Created by Administrator on 13-12-9. */package mainimport ( "fmt" "os" "net")/** * 将string类型的ip地址转换为IP对象 */func main() { name := "192.168.1.97" ip := net.ParseIP(name) if ip

2013-12-10 17:27:51 15445 1

原创 cgo

package main/*#include #include char* sayHello(char* name) { char* buf = (char*) malloc(64); sprintf(buf,"hello %s\n", name); return buf;}*/import "C"import "fmt"import "unsafe"func m

2013-12-09 17:20:06 952

原创 通过chan控制多个goroutine

/** * Created by Administrator on 13-12-9. */package mainimport "fmt"import "time"func main() { closeChan := make(chan int, 3) go func() { i := 0 var flag int = 0 go func() { flag

2013-12-09 16:10:36 2412

原创 go语言编写,简单聊天室程序 1

go语言网络编程,先从聊天室开始:/** * Created by Vicky.H on 13-12-6. * eclipser@163.com */package mainimport ( "fmt" "net" "strconv" "bytes" _ "bufio" _ "strings")var m map[string]*net.Connfu

2013-12-09 14:27:16 3345 1

原创 go语言defer使用

deferGo语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句。当函数执行到最后时,这些defer语句会按照逆序执行,最后该函数返回。特别是当你在进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露等问题。如下代码所示,我们一般写打开一个资源是这样操作的:func ReadWrite() bool

2013-09-27 12:53:54 34917 3

原创 go语言生产者,消费者事例

package mainimport "fmt"import "time"func main() { // ch := make(chan int, 10) ch := make(chan int) go produce("生产者1",ch) go produce("生产者2",ch) time.Slee

2013-09-26 15:50:27 2524

原创 go语言type使用小技巧

import "fmt"type Rank int const ( Rank001 Rank = iota Rank002 Rank003 Rank004)var rewards = [...]string{ "奖励1","奖励2","奖励3","奖励4",} func (r Ran

2013-09-17 19:59:01 4759

原创 go语言定时器

package mainimport "fmt"import "time"func main() { t := time.NewTimer(2 * time.Second) //v := <- t.C //fmt.Println(v) go onTime(t.C) fmt.Println("main thr

2013-09-17 15:41:57 10601

原创 go语言将函数作为参数传递

go语言函数作为参数传递,目前给我的感觉几乎和C/C++一致。非常的灵活。import "fmt"import "time"func goFunc1(f func()) { go f() }func goFunc2(f func(interface{}), i interface{}) { go f(i)}func goFunc(f

2013-09-17 15:06:20 25030 2

原创 编写maven插件。

网上有很多关于maven插件编写的内容,这里我还是以我的方式,大部分代码形式来阐述。<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"

2013-09-17 10:16:21 2414

原创 解决线程安全的另一种思路

/* * To change this template, choose Tools | Templates * and open the template in the editor. */package tmp;import java.util.ArrayList;import java.util.List;/** * * @author Vicky.H * @emai

2013-09-13 10:19:57 827

原创 go 数组

package mainimport "fmt"import "reflect"func main() { var arr[5]int fmt.Println(reflect.TypeOf(arr)) var sli[]int fmt.Println(reflect.TypeOf(sli)) arr1 := [1]int{100}

2013-09-02 17:01:41 977

原创 Java简单实现固定长度队列(FIFO)

/* * To change this template, choose Tools | Templates * and open the template in the editor. */package linkedlisttest;import java.util.LinkedList;/** * * @author Vicky.H * @email eclipser

2013-08-28 13:07:53 281831

原创 将类的成员函数注册为回调函数

#include class Object {};typedef int(Object::*SAYFUNC)(const char*);class A : public Object{public: int say(const char* msg) { std::cout << "A say " << msg << std::endl; return 0; }

2013-07-31 11:20:36 1917

原创 golang接口的实现以及注意事项。

package mainimport ( "fmt")type Animal interface { move()}type Human struct { i int}func (r Human) move() { // 注意 fmt.Println("人类行走") r.i++}type Bird struct { i int}func (r *Bir

2013-07-15 14:25:49 7049

原创 指向指针的指针相关

1.char* buf1[9] = {"hello", "bestwish"};buf1+=9;strlen(buf1)    ==  ?2.int* i[10];int(*j) [10];名词解释:sizeof(i)  ==  ?sizeof(j)  ==  ?/* * File: main.cpp * Author: v

2013-07-04 19:32:59 685

原创 回顾进制的转换

二进制,八进制,十进制,十六进制的转换是作为程序员必须会的.其思想很简单,无外乎就是:2进制遇2进18进制遇8进1...二进制与十进制转换:二进制11111111转换为十进制:1 1 1111 1 11 2 481632 64 128  =255二进制10101010转换为十进制:1 0 1010 1 01 0 4

2013-03-01 21:05:36 1689

原创 google protocol buffer 与 redis 结合使用

google protocol buffer 可以将对象序列化,而redis作为优秀的NOSQL数据库,这里我将以实例方式介绍,将C++对象序列化,并存放在redis数据库中! google protocol buffer 的安装以及基础使用可以阅读我上一片文章.redis的安装使用,可以查阅,这里不再描述.我使用redis的官方C client: hiredis. proto

2013-01-23 16:27:29 11965

JPA2.0-Spring2.x-Struts2注解

主要讲述JPA2.0规范,Struct2 Spring注解等技术

2012-02-21

空空如也

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

TA关注的人

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