re: 為游戲系統選擇一個接口方式[未登錄] christanxw 2010-01-06 09:05
Python不慢,我們的已經運營的游戲項目就是用Python做的腳本,上層所有邏輯全部都是Python寫的,不管是服務端還是客戶端。
我個人還是更喜歡簡潔的LUA。
樓主難道就不知道C++類構造函數不要隨便使用memset去初始化對象嗎?一切問題都是你的memset引起的,跟string沒關系。
re: 游戲資源在線更新的思路[未登錄] christanxw 2009-05-20 08:39
我們的做法:
做一個更新服務器,用來匹配資源版本號。
客戶端每次登陸前都先連接更新服務器,如果發現有新的版本,則去文件服務器(http,ftp服務器)下載更新包。之后客戶端本地解壓打包就完成了更新。
樓主認為peekmessage和OnIdle難道不是一樣的嗎?
re: 今天完成了下線通知功能[未登錄] christanxw 2008-09-29 11:17
下線通知周圍玩家不應有是服務器的事情嗎?client無論什么方式下線(掉線,宕機....)服務器都應該檢測到。
re: 對string類的思考[未登錄] christanxw 2008-06-17 18:58
類似于MFC CSting的內存結構
3- 為了避免內存拷貝,可以嘗試關閉SOCKET的發送和接收緩沖區,不過代價是,你需要更多的接收請求POST到一個數據流量比較大的SOCKET,從而保證系統一直可以找到BUFFER來收取到來的數據.
關閉SOCKET緩沖區一般并不能使性能得到提升。
re: (C++)一個愚蠢的錯誤[未登錄] christanxw 2008-06-07 22:51
樓上的,C++里結構就是類,而不是原生的C結構。用memset會把類里的一些必要數據也清零。比如如果類有虛函數,則就有虛表指針,你用memset會把虛函數表指針置為0,這樣你的類還有多態嗎,你的程序還是健壯的嗎
突破select的FD_SETSIZE限制[未登錄] christanxw 2008-05-24 20:41
多此一舉。直接重新定義FD_SETSIZE不就是了,何必搞這么復雜。
多此一舉。直接重新FD_SETSIZE不就是了,何必搞這么復雜。
re: 網絡編程 心得2[未登錄] christanxw 2008-04-25 08:57
SO_DONTLINGER的設置將會使得未發送的系統緩沖區數據丟失。更好的還是設置為重用端口。
re: 單鏈表逆序輸出[未登錄] christanxw 2008-04-18 23:43
遞歸絕對是失敗的做法。
re: 多線程學習中碰到的一個很有意思的問題 [未登錄] christanxw 2007-04-05 09:16
本質原因是你在線程中使用了printf()這樣的非多線程安全的函數。你用它的多線程版本(/MTd或/MDd)就沒問題了,或者你在使用/MLd時對printf加鎖也不會出問題。
re: 一個微秒級的定時函數 christanxw 2006-09-02 15:20
Nt以上才支持
re: 一次關于旨在降低編譯時間的整改工作(vc++) christanxw 2006-07-03 15:51
為什么不用分布式編譯工具 Xoreax IncrediBuild?
google一下就知道了。
re: 用返回類型BOOL替代函數返回類型void christanxw 2006-05-17 18:57
關于是用返回值還是異常一直都是個令人煩惱的話題。
不過我認為自己開發的程序如果只是自己使用的話,用返回值是最好的(當然適當的加上日志記錄最好了)。因為你自己知道什么時候作錯誤處理。如果是開發庫給別人使用,用異常可能比較好,因為你不知道你的客戶該怎么去處理錯誤,所以應該把錯誤處理的主動權交給客戶。
re: 現在C++的應用領域有哪些?大家各抒己見。 christanxw 2006-04-25 19:00
所有的游戲都是C/C++
re: std::string一個極其隱晦得問題 christanxw 2006-04-18 20:29
Dll的出口函數最好是用標準的C類型。
re: 為什么Python的性能比較好呢? christanxw 2006-04-01 22:10
#include <windows.h>
#include <cstdio>
#include <iostream>
unsigned long cryptTable[0x500];
const int HASH = 0;
const int HASH_A = 1;
const int HASH_B = 2;
void InitCryptTable()
{
unsigned long seed = 0x00100001, index1 = 0, index2 = 0, i;
for(index1 = 0; index1 < 0x100; index1++)
{
for(index2 = index1, i = 0; i < 5; i++, index2 += 0x100)
{
unsigned long temp1, temp2;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp1 = (seed & 0xFFFF) << 0x10;
seed = (seed * 125 + 3) % 0x2AAAAB;
temp2 = (seed & 0xFFFF);
cryptTable[index2] = (temp1 | temp2);
}
}
}
unsigned long Hash(char *pStr, unsigned long dwHashType)
{
unsigned char *key = (unsigned char *)pStr;
unsigned long seed1 = 0x7FED7FED, seed2 = 0xEEEEEEEE;
int ch;
while(*key != 0)
{
ch = toupper(*key++);
seed1 = cryptTable[(dwHashType << 8) + ch] ^ (seed1 + seed2);
seed2 = ch + seed1 + seed2 + (seed2 << 5) + 3;
}
return seed1;
}
struct HashItem
{
unsigned long m_nHashKeyA;
unsigned long m_nHashKeyB;
bool m_bExist;
};
int main()
{
__int64 t1, t2;
GetSystemTimeAsFileTime( (LPFILETIME)&t1 );
InitCryptTable();
FILE* fread = fopen("c:\\email.txt","r");
FILE* fwrite = fopen("c:\\emailnew.txt","w+");
HashItem *hashTable = new HashItem[780000];
char line[256] = "";
fgets(line,255,fread);
while(!feof(fread))
{
int nStart = Hash(line,HASH) % 780000;
int nPos = nStart;
if(!(hashTable[nPos].m_bExist
&& hashTable[nPos].m_nHashKeyA ==Hash(line,HASH_A)
&& hashTable[nPos].m_nHashKeyB == Hash(line,HASH_B)))
{
hashTable[nPos].m_nHashKeyA = Hash(line,HASH_A);
hashTable[nPos].m_nHashKeyB = Hash(line,HASH_B);
hashTable[nPos].m_bExist = true;
fprintf(fwrite,"%s",line);
}
fgets(line,255,fread);
}
GetSystemTimeAsFileTime( (LPFILETIME)&t2 );
printf( "經過了%I64d.%04I64d毫秒\n", (t2-t1)/10000, (t2-t1)%10000 );
fclose(fread);
fclose(fwrite);
delete [] hashTable;
std::cin.get();
}
耗時343毫秒。很不錯了。呵呵。Ptyong也是C寫出來的,C/C++效率是完全可以比Pyton更快的,就看怎么實現算法了。在總多的腳本語言中Python是比較慢的一個了。
re: C++代碼靜態分析工具-Prefast christanxw 2006-03-28 18:32
哪里可以下載?
re: 使用仿函數來管理分散的常用代碼 christanxw 2006-03-23 09:16
怎么不做個例子看看?
re: C++博客的精華區分類構想(意見收集) christanxw 2005-11-16 14:54
同意一樓
外加C++網絡編程,比如ACE
re: C++的類型萃取技術 christanxw 2005-11-15 16:47
《泛型編程與STL》及《STL中文版》中對類型萃取解釋的很好,摟主總結的不錯
美文一篇!
re: C++的靜態分派技術 christanxw 2005-11-15 16:36
這在STL中有著廣泛的應用
是很好的輔助工具,但裝了這個,同時打開VS和金山詞霸2005時,發現VS會自動被關閉,無意中發現的。
re: 找一個工作好難 christanxw 2005-09-22 08:41
游戲公司
re: 簡單的變量交換 christanxw 2005-09-19 19:30
這樣也可以:
#include <iostream>
using namespace std;
int main()
{
int Number1 = 23;
int Number2 = 33;
cout<<Number1<<"\n"<<Number2<<endl;
Number1 = Number1 + Number2;
Number2 = Number1 - Number2;
Number1 = Number1 - Number2;
cout<<Number1<<"\n"<<Number2<<endl;
return 0;
}
當然樓主的更猛,不會產生溢出,我這個方法可能產生溢出,呵呵_^_