金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks
共4页: 1 2 3 4 
re: log4cxx中文输出错误补丁 金庆 2014-05-13 21:15
@bigbad
src不为空时,position到新的src处,这2种计算相同:
in.position(in.position() + src - in.current());
in.position(src - in.data());

src为空时,2种计算不相同:
in.position(in.limit());
in.position(in.position() + strnlen(in.current(), in.remaining()));
当in中间有'\0'时,in.limit()会跳过剩余的输入串。

@lgl
需要先安装python.
@cmi
需要内网测试,速度接近网络带宽。
同意网游数据分主从数据,主数据可读写,从数据是主数据的缓存,只读。主数据在对应的功能进程内存中,其他进程的该数据为从数据。客户端进程数据都是从数据,本地文件保存或数据库保存也是从数据。
划分数据所属进程要看进程写的次数,其他进程写数据只能请求属主进程。
re: 线程安全的随机数生成 金庆 2013-03-19 16:00
@春秋十二月
多线程调用时,局部静态变量s_pRng可能并发多次初始化。多谢指出。thread_specific_ptr的示例代码中用的是全局变量,只有一次初始化。
还是改成全局静态变量好了。

typedef boost::random::mt19937 Generator;
static boost::thread_specific_ptr<Generator> s_pRng;

static Generator & GetGen()
{
Generator * pRng = s_pRng.get();
...
}
re: 线程安全的随机数生成 金庆 2013-03-18 19:01
@春秋十二月
当然是线程安全的。
re: 自动删除的定时器队列 金庆 2012-11-14 19:23
@zozoiiiiii
没错,是在~Player()中注销的。上面的代码是如何注销。假设某个Player注册了上千个定时器,需要在~Player()中调用上千次注销方法吗?
re: SVN中邪恶的replace 金庆 2012-06-15 10:37
@marten
是在客户端操作。目前版本的TSVN的show log有个选项, "stop on copy/rename", 取消该选项,应该能看到历史记录了。
re: log4cxx的使用模式 金庆 2012-04-27 18:02
宏定义需要使用 do { ... } while(0) 包裹,不然 if (...) LOG_DEBUG("n", "m"); else ... 会报编译错误。
@Zealotyin
有博客证明能力很好。
@蜗牛
上海松江
re: log4cxx的使用模式 金庆 2012-02-15 10:15
@玉兔
方法1: 不要删正打开的日志。
方法2: 修改log4cxx代码,让它自动生成新的日志。
re: 【备忘】STL使用备忘 金庆 2012-02-10 10:08
boost::algorithm::to_lower(str);
只要有一个包到达,完成端口就执行一次从缓冲里读操作检测执行,而通常应用,一个数据段会由很多包组成,这样,内核线程需要调度很多次,而如果使用非阻塞 SOCKET读,通过定时检查机制,可以避免这种内部的频繁调度. 参见: 网络编程--走出完成端口的误区 ( http://blog.csdn.net/danscort2000/article/details/4703391 )
re: 在C++中使用IoC及DSM框架 金庆 2011-07-07 11:46
再次阅读. SCA是忽悠吗? 需要比较一下PocoCapsule和SCA C++.
re: 一道C++面试题的误区 金庆 2011-05-06 15:03
应该让比较操作是耗时的, 而赋值操作是不耗时的, 这样才能体现出算法的优劣.
@egmkang
社交圈子只是社会关系的一种. 一个人的直接关系是有限的, 但间接关系是无限的.
re: VS2005编译libevent 金庆 2011-01-06 11:29
@hustnn
自己搜索一下吧:)
re: 生成随机数的一段代码 金庆 2010-12-23 12:17
绝对随机? 连伪随机都称不上.
需将 int x = rand()/(RAND_MAX/(sizeof(sourchar)-1));
改为 int x = int(double(rand())/RAND_MAX * (sizeof(sourchar)-1));
不然 x 取到最大值的概率明显小于其他值.
re: UI中包裹物品排序 金庆 2010-12-20 11:46
包裹整理是客户端功能. 严格说, 应该是外挂(辅助程序)的功能. 只要客户端开放了包裹读取和操作的接口, 用户可以自定义包裹整理.
re: VS2005编译libevent 金庆 2010-11-15 13:44
@刚工作的新手
引用libevent需要在编译选项添加-L -l选项, 请查看gcc中相关的帮助. 需要用mingw编译的, vc编译的只能用于vc. mingw下直接make install应该就可以了, 我忘了以前自己是怎么做的.
re: VS2005编译libevent 金庆 2010-11-12 11:22
@你好,
1. 动态库也行, 一般还是静态简单点
2. 进WIN32-Prj编译
3. 需要设置Include目录和Lib目录
"线程之间尽量避免传递指针"? 能说明一下吗?传id和传指针有什么区别?
re: 未来网游三大主流技术 金庆 2010-08-23 12:47
@yisa
我觉得网游应该淡化输入的即时性。比如:网游不适合做格斗游戏,适合星际战争这类的。因为网络延时是没法解决的。最好是相对移动缓慢的,攻击后需要一段时间才能收到攻击结果的。
(我没有QQ号,喜欢邮件交流,jinq0123AT163)
re: SVN中邪恶的replace 金庆 2010-08-20 10:10
@fj
SVN log 中有个 replacing 记录,对该记录的版本执行 “revert changes from this revision” 即可。注意要TSVN显示整个目录的log。
@yisa
这里的指针应该是对象的ID号吧?RPC中就是对象的引用。
@yisa
拥挤时减速是最符合常理的。现实中的情况是拥挤程度可以很高,如早高峰时的地铁内。2D网游中的阻挡点造成场景内一个人占一个格子的情形不符合现实。客户端只需将拥挤的情形表现出来,不要出现模型对穿就好了。减速的成本几乎为0. 主要是看客户端的效果,是否能做出拥挤的效果。
@yisa
kok3中有导航预测,也有滞后补偿时间,所以有同伴落后问题。网络卡时,会有人物被拉回的现象。这一部份一直在改进,现在已经很不错了,正常情况下感觉真实性很好。
re: MMORPG服务器组集群方案 金庆 2010-07-09 15:40
支线是什么意思?
BaseApp只是聊天和广播,独立出来是否更好?让Client直接连CellApp好了。
re: 多线程还是单线程? 金庆 2010-07-09 14:42
两者性能没什么差别,就看哪个实现简单了。
@战魂小筑
用数据库来配置,代码量更大,逻辑上多了一层,结构上受限于数据库的表格模式,各方面都没有配置文件更适合。我认为,在网游中,只读的数据应该用配置文件,数据保存才用数据库。配置文件可以用INI,XML,或自定义文本格式,不应该用二进制格式,因为文本可以直接编辑。用XML有XML验证功能,如判断某个属性必须配置,这一点上优于其他配置文件。
re: 需要判断指针为空吗 金庆 2010-05-13 09:38
@classyk
传统的C程序中是int类型到处使用,而在C++中更倾向于各种功能用不同的类型,如容器大小用size_t. 用无符号数减少了小于0的判断,“更加麻烦”在哪里?
消息不是发给角色或监控器,而是发给它们的客户端。先列举可接收的客户端,再广播,就不会重复了。
re: SVN中邪恶的replace 金庆 2010-02-26 15:11
@Jim
自己试试吧。试过才能理解SVN操作。
如果逻辑模块是个脚本,脚本热替换应该没有一点问题. 如果是进程,热替换是很麻烦的。
要网络有足够带宽才行。
re: 需要判断指针为空吗 金庆 2010-02-11 16:18
@kevin lynx
我的观点是:只要有可能为空的,就一定要判断是否为空; 不可能为空的,可以用一个assert断言来表达。
关键在于判断是否有可能为空。由函数调用者保证不为空的,就认为不可能为空,可在函数说明中注释并在函数开始处加个断言。由进程以外输入决定的,如用户输入,文件输入,或其他进程传入数据决定的指针,即使外部接口规定了不会造成空指针,但仍应该对输入判断。外部输入错误不应该造成程序错误。
@李现民
试了一下,确实如此。我打开lib文件查到了加了前后缀的变量名,然后在主调程序中添加/include指令,这样才有效。我原来以为只需加在静态库中呢。实际上,静态库中加不加/include指令,都会输出符号。但是static变量是无论如何都不会输出符号的。/include指令与引用该符号的作用一样。所以我的结论是应该输出一个init()函数来初始化静态库。
Issues with static variables in static libraries
( http://social.msdn.microsoft.com/Forums/en/vclanguage/thread/5c5ee89d-2a38-483d-8550-484550901170 )

You can use the /INCLUDE linker option:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore/html/_core_.2f.INCLUDE.asp

Or you place a #pragma in your code like this:
#pragma comment(linker, "/include:SymbolToUse")
@王汉平
我查了一下,是spirit有新旧版本区别。以上代码是旧的使用方法(classic).
可以忽略该警告。
也可以如下更改:
-#include <boost/spirit.hpp>
+#include <boost/spirit/include/classic.hpp>
- using namespace boost::spirit;
+ using namespace boost::spirit::classic;
@陈梓瀚(vczh)
是我没表达清楚。我指的测试失败是指容忍度太小。
生成10000个随机数,不可能正好9000个为1-50,在该数上下一定范围内都可判为通过。
例如容忍度取正负1%,绝大多数测试会通过,但仍有小概率不能满足误差1%,会超出范围而判断为测试失败。
re: ACE vs Boost: Singleton的实现 金庆 2009-12-03 16:06
以上DCL单件的实现可能是有缺陷。但我不是很确信。因为ACE确实是这样实现的。按我的理解,加个volatile就好了。“The "Double-Checked Locking is Broken" Declaration”( http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html )一文可作参考。不知adah所说的批驳是否指这一点?
re: 显示wxStaticBitmap的窗口 金庆 2009-11-13 09:42
@Jacky
可能是wx的错误. 有空可以研究研究.
是不是就是unique()啊?
re: C++引用优于指针 金庆 2009-10-30 16:09
@Johnson
@溪流
在C++中, 指针和引用参数都是提醒开发人员这是输出参数.
表示输入参数的是const关键字.
@yisa
@踏雪赤兔
既然可以这样赋值: lB.assign(lD.begin(), lD.end());
也应该支持等号运算符赋值: lB = lD;

既然支持元素的隐式类型转换, 也应该支持容器的隐式类型转换.
@浩毛
我的假定是客户端程序可以被破解.
所有客户端密码,加密方法,与服务器的通信协议都是可见的.
oid再满足唯一性不是更好? 最好是只有一个标识.
re: vc编译期的常量除法优化 金庆 2009-09-23 15:00
除以常数转换为乘以常数.
@teli_eurydice
没碰到过,给个示例看看?
共4页: 1 2 3 4