- 博客(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
原创 C++11 std::bind std::function 高级用法
C++11 std::bind std::function 高级用法
2014-04-24 13:11:28 51940 5
原创 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
原创 关于云服务器
刚才和以前同学,聊到云服务器,分布式计算的问题。现在他用的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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人