关闭

关于warning C4512: “`anonymous-namespace'::******”: 未能生成赋值运算符

今天头一次注意到这个warning(以前一定出现过,但是我没发现)。 如果类成员中包含引用(引用一旦初始化就不能再赋值你懂的)或者const对象,编译期就无法自动生成=操作符重载函数了。 声明为private: int operator=(ref const&); 即可避免编译器生成默认的 = 操作符...
阅读(2312) 评论(1)

C/C++中volatile关键字详解

今天在修改XBase的ConnectionManager时,需要一个连接数组,但因为是多线程访问的,所以每个元素(是一个指针)都可能会发生变化。之前定义volatile一直没有一个系统的了解。这里找了一篇文章,感觉说的很全面 1. 为什么用volatile?     C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memor...
阅读(896) 评论(0)

windows下SVN无法修改日志的问题

猜测因为本身SVN没有日志的版本管理,所以被修改的日志将永远消失,所以默认是禁止修改的。但可以通过以下办法解决该问题 1.在版本库中建立文件:【pre-revprop-change.bat】 2.编辑该文件,将以下内容copy进去,保存 if "%4" == "svn:log" exit 0 echo Property '%4' cannot be changed >&2 exit 1...
阅读(1054) 评论(0)

调试release版本程序dump时出现的代码定位不准确问题

在调试release程序crash dump时,因为编译器优化了代码,所以会造成崩溃位置定位不准确的问题,这个问题让人很恼火。 搜索了很久关于这方面的问题,最终无果。 自己进行尝试,最终得出解决方案: 若希望崩溃时代码定位准确,则需要取消掉编译器代码优化,在VisualStudio 2008中的方法如下: 工程上右键 -> 属性 -> C/C++ -> 优化 -> 第一项【优化】,...
阅读(1337) 评论(0)

依赖名称不是类型[关于模板类中的迭代器]

今天在封装STL时候遇到了这么一个问题 template class MyList { public: typedef std::list::iterator iterator; }; 当我想这样封装迭代器的时候,编译器告诉我:依赖名称不是类型 遂百度。得答案: template class MyList { public: typedef typename std::list::it...
阅读(2582) 评论(0)

继续XBase网络部分

1.其实updateConn时,popRecvData可以改成getRecvData,这样可以避免一次拷贝。如果get成功,再pop掉队列里的数据 2.还是先做一个数组的连接管理方式吧。...
阅读(391) 评论(0)

回收连接的时机

1.应该在处理掉Disconnect事件后释放。 2.XNetServer和XNetClient不负责初始化XIOCP和XNetConnectionManager...
阅读(339) 评论(0)

IOCP性能优化:使用环形缓冲提升IOCP效率(无锁缓冲)

最近在重构之前写的网络底层时,从各个方面认真考虑了每一个细节实现。其中,在提交I/O(WSASend/WSARecv)和I/O完成(GetQueuedCompletionStatus)时,难免出现一个缓冲区需要两个线程公用的问题。 假设主线程不断发送该消息,这些消息被堆叠在一个缓冲区里,定时使用WSASend提交发送I/O请求,在GetQueuedCompletionStatus返回后,...
阅读(4685) 评论(25)
    个人资料
    • 访问:342892次
    • 积分:3692
    • 等级:
    • 排名:第9172名
    • 原创:74篇
    • 转载:38篇
    • 译文:0篇
    • 评论:78条
    好站链接
    尤龙同学的代码与诗歌