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()會跳過剩余的輸入串。
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()會跳過剩余的輸入串。
re: 用Boost.Python構建混合系統 金慶 2013-12-16 16:40
@lgl
需要先安裝python.
需要先安裝python.
re: 使用完成端口HTTP下載的代碼 金慶 2013-12-16 16:39
@cmi
需要內網測試,速度接近網絡帶寬。
需要內網測試,速度接近網絡帶寬。
re: 網游服務器多進程架構的思考 金慶 2013-07-24 17:50
同意網游數據分主從數據,主數據可讀寫,從數據是主數據的緩存,只讀。主數據在對應的功能進程內存中,其他進程的該數據為從數據。客戶端進程數據都是從數據,本地文件保存或數據庫保存也是從數據。
劃分數據所屬進程要看進程寫的次數,其他進程寫數據只能請求屬主進程。
劃分數據所屬進程要看進程寫的次數,其他進程寫數據只能請求屬主進程。
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();
...
}
多線程調用時,局部靜態變量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()中調用上千次注銷方法嗎?
沒錯,是在~Player()中注銷的。上面的代碼是如何注銷。假設某個Player注冊了上千個定時器,需要在~Player()中調用上千次注銷方法嗎?
re: SVN中邪惡的replace 金慶 2012-06-15 10:37
@marten
是在客戶端操作。目前版本的TSVN的show log有個選項, "stop on copy/rename", 取消該選項,應該能看到歷史記錄了。
是在客戶端操作。目前版本的TSVN的show log有個選項, "stop on copy/rename", 取消該選項,應該能看到歷史記錄了。
re: log4cxx的使用模式 金慶 2012-04-27 18:02
宏定義需要使用 do { ... } while(0) 包裹,不然 if (...) LOG_DEBUG("n", "m"); else ... 會報編譯錯誤。
re: 巨人網絡3D頁游《冒牌天神》招聘服務器C++程序員 金慶 2012-04-06 18:55
@Zealotyin
有博客證明能力很好。
有博客證明能力很好。
re: 巨人網絡3D頁游《冒牌天神》招聘服務器C++程序員 金慶 2012-02-23 12:15
@蝸牛
上海松江
上海松江
re: log4cxx的使用模式 金慶 2012-02-15 10:15
@玉兔
方法1: 不要刪正打開的日志。
方法2: 修改log4cxx代碼,讓它自動生成新的日志。
方法1: 不要刪正打開的日志。
方法2: 修改log4cxx代碼,讓它自動生成新的日志。
re: 【備忘】STL使用備忘 金慶 2012-02-10 10:08
boost::algorithm::to_lower(str);
re: 使用完成端口HTTP下載的代碼 金慶 2011-08-19 15:34
只要有一個包到達,完成端口就執行一次從緩沖里讀操作檢測執行,而通常應用,一個數據段會由很多包組成,這樣,內核線程需要調度很多次,而如果使用非阻塞 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
應該讓比較操作是耗時的, 而賦值操作是不耗時的, 這樣才能體現出算法的優劣.
re: MMORPG的發展方向是大型化 金慶 2011-04-27 09:37
@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 取到最大值的概率明顯小于其他值.
需將 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應該就可以了, 我忘了以前自己是怎么做的.
引用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目錄
1. 動態庫也行, 一般還是靜態簡單點
2. 進WIN32-Prj編譯
3. 需要設置Include目錄和Lib目錄
re: 【原創】從同步互斥機制到智能指針使用成本 金慶 2010-09-02 16:44
"線程之間盡量避免傳遞指針"? 能說明一下嗎?傳id和傳指針有什么區別?
re: 未來網游三大主流技術 金慶 2010-08-23 12:47
@yisa
我覺得網游應該淡化輸入的即時性。比如:網游不適合做格斗游戲,適合星際戰爭這類的。因為網絡延時是沒法解決的。最好是相對移動緩慢的,攻擊后需要一段時間才能收到攻擊結果的。
(我沒有QQ號,喜歡郵件交流,jinq0123AT163)
我覺得網游應該淡化輸入的即時性。比如:網游不適合做格斗游戲,適合星際戰爭這類的。因為網絡延時是沒法解決的。最好是相對移動緩慢的,攻擊后需要一段時間才能收到攻擊結果的。
(我沒有QQ號,喜歡郵件交流,jinq0123AT163)
re: SVN中邪惡的replace 金慶 2010-08-20 10:10
@fj
SVN log 中有個 replacing 記錄,對該記錄的版本執行 “revert changes from this revision” 即可。注意要TSVN顯示整個目錄的log。
SVN log 中有個 replacing 記錄,對該記錄的版本執行 “revert changes from this revision” 即可。注意要TSVN顯示整個目錄的log。
re: Boost Serialization在網游中的應用實例 金慶 2010-07-27 14:10
@yisa
這里的指針應該是對象的ID號吧?RPC中就是對象的引用。
這里的指針應該是對象的ID號吧?RPC中就是對象的引用。
re: 不喜歡KOK3中人物無阻擋的設定 金慶 2010-07-27 10:23
@yisa
擁擠時減速是最符合常理的。現實中的情況是擁擠程度可以很高,如早高峰時的地鐵內。2D網游中的阻擋點造成場景內一個人占一個格子的情形不符合現實。客戶端只需將擁擠的情形表現出來,不要出現模型對穿就好了。減速的成本幾乎為0. 主要是看客戶端的效果,是否能做出擁擠的效果。
擁擠時減速是最符合常理的。現實中的情況是擁擠程度可以很高,如早高峰時的地鐵內。2D網游中的阻擋點造成場景內一個人占一個格子的情形不符合現實。客戶端只需將擁擠的情形表現出來,不要出現模型對穿就好了。減速的成本幾乎為0. 主要是看客戶端的效果,是否能做出擁擠的效果。
re: 利用慣性和加速度進行網游位置同步 金慶 2010-07-27 10:13
@yisa
kok3中有導航預測,也有滯后補償時間,所以有同伴落后問題。網絡卡時,會有人物被拉回的現象。這一部份一直在改進,現在已經很不錯了,正常情況下感覺真實性很好。
kok3中有導航預測,也有滯后補償時間,所以有同伴落后問題。網絡卡時,會有人物被拉回的現象。這一部份一直在改進,現在已經很不錯了,正常情況下感覺真實性很好。
re: MMORPG服務器組集群方案 金慶 2010-07-09 15:40
支線是什么意思?
BaseApp只是聊天和廣播,獨立出來是否更好?讓Client直接連CellApp好了。
BaseApp只是聊天和廣播,獨立出來是否更好?讓Client直接連CellApp好了。
re: 多線程還是單線程? 金慶 2010-07-09 14:42
兩者性能沒什么差別,就看哪個實現簡單了。
re: 客戶端服務器應統一庫的使用 金慶 2010-05-13 09:49
@戰魂小筑
用數據庫來配置,代碼量更大,邏輯上多了一層,結構上受限于數據庫的表格模式,各方面都沒有配置文件更適合。我認為,在網游中,只讀的數據應該用配置文件,數據保存才用數據庫。配置文件可以用INI,XML,或自定義文本格式,不應該用二進制格式,因為文本可以直接編輯。用XML有XML驗證功能,如判斷某個屬性必須配置,這一點上優于其他配置文件。
用數據庫來配置,代碼量更大,邏輯上多了一層,結構上受限于數據庫的表格模式,各方面都沒有配置文件更適合。我認為,在網游中,只讀的數據應該用配置文件,數據保存才用數據庫。配置文件可以用INI,XML,或自定義文本格式,不應該用二進制格式,因為文本可以直接編輯。用XML有XML驗證功能,如判斷某個屬性必須配置,這一點上優于其他配置文件。
re: 需要判斷指針為空嗎 金慶 2010-05-13 09:38
@classyk
傳統的C程序中是int類型到處使用,而在C++中更傾向于各種功能用不同的類型,如容器大小用size_t. 用無符號數減少了小于0的判斷,“更加麻煩”在哪里?
傳統的C程序中是int類型到處使用,而在C++中更傾向于各種功能用不同的類型,如容器大小用size_t. 用無符號數減少了小于0的判斷,“更加麻煩”在哪里?
re: MMORPG游戲服務器場景中對于多個觀察者的廣播消息重復解決方案。 金慶 2010-04-29 10:17
消息不是發給角色或監控器,而是發給它們的客戶端。先列舉可接收的客戶端,再廣播,就不會重復了。
re: SVN中邪惡的replace 金慶 2010-02-26 15:11
@Jim
自己試試吧。試過才能理解SVN操作。
自己試試吧。試過才能理解SVN操作。
re: 服務器程序運行時邏輯替換 金慶 2010-02-12 11:48
如果邏輯模塊是個腳本,腳本熱替換應該沒有一點問題. 如果是進程,熱替換是很麻煩的。
re: 對未來虛擬化和遠程桌面技術發展和融合的展望 金慶 2010-02-12 11:43
要網絡有足夠帶寬才行。
re: 需要判斷指針為空嗎 金慶 2010-02-11 16:18
@kevin lynx
我的觀點是:只要有可能為空的,就一定要判斷是否為空; 不可能為空的,可以用一個assert斷言來表達。
關鍵在于判斷是否有可能為空。由函數調用者保證不為空的,就認為不可能為空,可在函數說明中注釋并在函數開始處加個斷言。由進程以外輸入決定的,如用戶輸入,文件輸入,或其他進程傳入數據決定的指針,即使外部接口規定了不會造成空指針,但仍應該對輸入判斷。外部輸入錯誤不應該造成程序錯誤。
我的觀點是:只要有可能為空的,就一定要判斷是否為空; 不可能為空的,可以用一個assert斷言來表達。
關鍵在于判斷是否有可能為空。由函數調用者保證不為空的,就認為不可能為空,可在函數說明中注釋并在函數開始處加個斷言。由進程以外輸入決定的,如用戶輸入,文件輸入,或其他進程傳入數據決定的指針,即使外部接口規定了不會造成空指針,但仍應該對輸入判斷。外部輸入錯誤不應該造成程序錯誤。
re: 靜態庫中全局變量的初始化問題 金慶 2010-02-10 15:52
@李現民
試了一下,確實如此。我打開lib文件查到了加了前后綴的變量名,然后在主調程序中添加/include指令,這樣才有效。我原來以為只需加在靜態庫中呢。實際上,靜態庫中加不加/include指令,都會輸出符號。但是static變量是無論如何都不會輸出符號的。/include指令與引用該符號的作用一樣。所以我的結論是應該輸出一個init()函數來初始化靜態庫。
試了一下,確實如此。我打開lib文件查到了加了前后綴的變量名,然后在主調程序中添加/include指令,這樣才有效。我原來以為只需加在靜態庫中呢。實際上,靜態庫中加不加/include指令,都會輸出符號。但是static變量是無論如何都不會輸出符號的。/include指令與引用該符號的作用一樣。所以我的結論是應該輸出一個init()函數來初始化靜態庫。
re: 靜態庫中全局變量的初始化問題 金慶 2010-02-09 19:44
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")
( 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")
re: 用boost::spirit實現的表達式求值 金慶 2010-01-14 13:18
@王漢平
我查了一下,是spirit有新舊版本區別。以上代碼是舊的使用方法(classic).
可以忽略該警告。
也可以如下更改:
-#include <boost/spirit.hpp>
+#include <boost/spirit/include/classic.hpp>
- using namespace boost::spirit;
+ using namespace boost::spirit::classic;
我查了一下,是spirit有新舊版本區別。以上代碼是舊的使用方法(classic).
可以忽略該警告。
也可以如下更改:
-#include <boost/spirit.hpp>
+#include <boost/spirit/include/classic.hpp>
- using namespace boost::spirit;
+ using namespace boost::spirit::classic;
re: 隨機數生成器應該如何單元測試? 金慶 2010-01-11 10:08
@陳梓瀚(vczh)
是我沒表達清楚。我指的測試失敗是指容忍度太小。
生成10000個隨機數,不可能正好9000個為1-50,在該數上下一定范圍內都可判為通過。
例如容忍度取正負1%,絕大多數測試會通過,但仍有小概率不能滿足誤差1%,會超出范圍而判斷為測試失敗。
是我沒表達清楚。我指的測試失敗是指容忍度太小。
生成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的錯誤. 有空可以研究研究.
可能是wx的錯誤. 有空可以研究研究.
re: 小心刪除容器中元素時的迭代器失效 金慶 2009-10-30 16:13
是不是就是unique()啊?
re: C++引用優于指針 金慶 2009-10-30 16:09
@Johnson
@溪流
在C++中, 指針和引用參數都是提醒開發人員這是輸出參數.
表示輸入參數的是const關鍵字.
@溪流
在C++中, 指針和引用參數都是提醒開發人員這是輸出參數.
表示輸入參數的是const關鍵字.
re: STL容器的賦值運算符可以更靈活嗎? 金慶 2009-10-12 14:13
@yisa
@踏雪赤兔
既然可以這樣賦值: lB.assign(lD.begin(), lD.end());
也應該支持等號運算符賦值: lB = lD;
既然支持元素的隱式類型轉換, 也應該支持容器的隱式類型轉換.
@踏雪赤兔
既然可以這樣賦值: lB.assign(lD.begin(), lD.end());
也應該支持等號運算符賦值: lB = lD;
既然支持元素的隱式類型轉換, 也應該支持容器的隱式類型轉換.
re: 網游防刷指令攻擊的設計 金慶 2009-09-28 09:27
@浩毛
我的假定是客戶端程序可以被破解.
所有客戶端密碼,加密方法,與服務器的通信協議都是可見的.
我的假定是客戶端程序可以被破解.
所有客戶端密碼,加密方法,與服務器的通信協議都是可見的.
re: snmp為何用oid來唯一標識對象 金慶 2009-09-23 15:38
oid再滿足唯一性不是更好? 最好是只有一個標識.
re: vc編譯期的常量除法優化 金慶 2009-09-23 15:00
除以常數轉換為乘以常數.
re: Boost Serialization在網游中的應用實例 金慶 2009-09-21 17:33
@teli_eurydice
沒碰到過,給個示例看看?
沒碰到過,給個示例看看?