C++\CLI使用.net委托,*Callback注意"this"
今天在使用c++\cli的时候遇到了点关于委托,callback使用的问题,简单记录一下
首先贴段简单的C#中使用System.Threading.Timer的代码.
Timer GameTimer=new Timer(new TimerCallback(this.OnGameTimer),null,0,500);
以上定时器会每隔500毫秒去调用OnGameTimer方法,OnGameTimer方法的定义如下:
void OnGameTimer(object obj){...}
基于以上代码,结合C#的使用方法,我们来写出C++\CLI的使用代码.
Timer^ GameTimer=gcnew Timer(gcnew TimerCallback(this->OnGameTimer),NULL,500);
void OnGameTimer(Object^ obj){...}
很好,vs并没有提示什么语法错误,那么编译的结果呢?
好吧,一番搜索,msdn示例代码 链接如下:
题外话:
最近着手在重写一个很古老的游戏服务端,目前已使用C#按照原来的c++代码重写完了GateServer,LoginServer,RoleServer,GuildServer,但是GameServer选择使用C++\CLI进行重构.这份代码估计出生在1998年左右,没有使用任何设计模式,就连很多大量相同的代码都没有进行简单的封装,GameServer中的主要逻辑都写在game.cpp中,这个cpp足足有2M多,7-8w行代码揉在一起.如果GameServer也使用C#重写的话,那就无法预知工作量了.好在CLI的存在,让这份庞大杂乱的c++代码没花多少功夫就被.net化了,经测试运行进游戏一切正常. 剩下把它那稀烂的网络通信用我C#写的XKSocket替换掉,那一切就不在是问题了! XKSocket git地址: http://git.oschina.net/dreamzgj/XKSocket
C++\CLI使用.net委托,*Callback注意"this"的更多相关文章
- 30天C#基础巩固------了解委托,string练习
---->了解委托. 生活中的例子:我要打官司,我需要找一个律师,法庭上面律师为当事人辩护,它真正执行的是当事人的陈词,这时律师 就相当于一个委托对象.当事人则委托律师为自己辩解. ...
- C++/CLI——读书笔记《Visual C++/CLI从入门到精通》 第Ⅱ部分
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- c#重要特性之一委托
委托的构成必须满足的4个条件: 声明委托类型: 必须有一个方法包含了要执行的代码: 必须创建一个委托实例: 必须调用(invoke)委托实例 委托包装的方法需要满足以下条件 方法的签名必须与委托一致, ...
- C#当中的多线程_线程池
3.1 简介 线程池主要用在需要大量短暂的开销大的资源的情形.我们预先分配一些资源在线程池当中,当我们需要使用的时候,直接从池中取出,代替了重新创建,不用时候就送回到池当中. .NET当中的线程池是受 ...
- 对[yield]的浅究到发现[async][await]
原文:对[yield]的浅究到发现[async][await] 上篇对[foreach]的浅究到发现[yield]写完后,觉得对[yield]还没有理解清楚,想起曾经看过一位大牛的帖子讲的很深刻(链接 ...
- Asp.Net Core 轻松学-基于微服务的后台任务调度管理器
前言 在 Asp.Net Core 中,我们常常使用 System.Threading.Timer 这个定时器去做一些需要长期在后台运行的任务,但是这个定时器在某些场合却不太灵光,而且常常无法 ...
- [设计模式] javascript 之 命令模式
模式定义: [定义]: 将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 组成: 调用者(Invoker),命令请求(Comman ...
- Unity时钟定时器插件——Vision Timer源码分析之一
因为项目中,UI的所有模块都没有MonBehaviour类(纯粹的C#类),只有像NGUI的基本组件的类是继承MonoBehaviour.因为没有继承MonoBehaviour,这也不能使用Updat ...
- C#子线程执行完后通知主线程
其实这个比较简单,子线程怎么通知主线程,就是让子线程做完了自己的事儿就去干主线程的转回去干主线程的事儿. 那么怎么让子线程去做主线程的事儿呢,我们只需要把主线程的方法传递给子线程就行了,那么传递方法就 ...
随机推荐
- CentOS7安装docker以及错误解决
今天在公司电脑上安装docker出现了一些问题,原先是直接用yum安装docker,一次就成功了,由于公司的网络问题导致docker安装完出现了一些问题,客户端启动了,服务端一直启动不了:Job fo ...
- VMware workstation 虚拟网络 三种上网区别
以VMware workstation为例,其虚拟网络设备有3种: 第一种:vmnet0(桥接模式),无实体虚拟网卡,其实就是一个协议而已,会在对应网卡上加入VMware bridge protoco ...
- Flask接口返回JSON格式数据自动解析
一 自定义一个response类 from flask import Response, jsonify # 定义response返回类,自动解析json class JSONResponse(Res ...
- Web 项目没有发布到我们安装的tomcat目录下
新手做Web项目的时候,在Ecplise把app发布到tomcat,但最后项目并没有发布到我们自己安装的 tomcat目录下,而是在.metadata\.plugins\org.eclipse.wst ...
- Mavn 项目 引入第三方jar包 导致ClassNotFoundException
案例 我有一个Maven构建的项目,项目模块之间有依赖关系,我需要用到一个本地的jar包,而该jar包不能通过配置pom.xml文件从远程仓库自动下载,于是我直接导入该jar包到其中一个项目,不通过p ...
- Nginx(3)---代理与负载均衡
一.代理简述 代理分为正向代理和反向代理, 正向代理:客户端与目标服务器之间增加一个代理服务器,客户端直接访问代理服务器,在由代理服务器访问目标服务器并返回客户端并返回 .比如夜深人静的时候访问的一些 ...
- Arduino系列之光照传感器(三)
今天,我将简单做一个当光照值低于某个值的时候,灯光自动打开,当高于某个值的时候,自动关闭. 设计代码原理: 首先,定义一个全局变量,并赋予初始值 然后,初始化程序 将设定某个IO口为输出模式 读取光度 ...
- Node.js实战--资源压缩与zlib模块
Blog:<NodeJS模块研究 - zlib> Github:https://github.com/dongyuanxin/blog nodejs 的 zlib 模块提供了资源压缩功能. ...
- StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...
- C语言笔记--传递结构指针以及值传递,址传递
#include <stdio.h> #include <windows.h> #include <mmsystem.h> #include <string. ...