void FileSetupUpdate(void) {     SaveDataIndex *UpdateCurrentIndex;     BOOL IsFileChange;     if(GetTickCount()-LastFileChangTick <= 100)         return;     EnterCriticalSection(&CS_ReadFile);     EnterCriticalSection(&CS_SaveFile);          IsFileChange=FALSE;     // 파일이없거나 비었을경우     if(IndexFileItemCnt == 0)IsFileChange=TRUE;     else if(IndexFileBase)     {         // 현재까지 진행된 위치를얻음         UpdateCurrentIndex=(SaveDataIndex*)IndexFileBase;         // 파일을끝까지 다읽었을경우         if(UpdateCurrentIndex->Offset.QuadPart >= IndexFileItemCnt)         {             IsFileChange=TRUE;         }     }              // 파일을교환해야하는 조건     if(IsFileChange)     {         LastFileChangTick=GetTickCount();         // 인덱스파일이 매핑되어있다면         if(IndexFileMapping)         {             // 이전인덱스파일의 MMF를 해제한다             if(IndexFileBase)UnmapViewOfFile(IndexFileBase);             CloseHandle(IndexFileMapping);             // 인덱스파일 내용 지우기             SetFilePointer(hIndexFile[!SaveFileNo],0,0,FILE_BEGIN);             SetEndOfFile(hIndexFile[!SaveFileNo]);             //             SetFilePointer(hSaveFile[!SaveFileNo],0,0,FILE_BEGIN);             SetEndOfFile(hSaveFile[!SaveFileNo]);             FlushFileBuffers(hIndexFile[!SaveFileNo]);             FlushFileBuffers(hSaveFile[!SaveFileNo]);         }         // 초기화         SavedFileSize.QuadPart=0;         IndexFileMapping=NULL;         IndexFileBase=NULL;         IndexFileSize.QuadPart=0;         IndexFileItemSendCnt=0;                  IF_Cnt=0;         AMF=0;// 디버깅용 변수         SumDataCnt=0;// 디버깅용 변수         // 파일인덱스 교환         SaveFileNo=!SaveFileNo;         // 새료쓰여질 인덱스파일 파일을 셋팅한다         LARGE_INTEGER FileSize;         // 파일크기얻어냄         GetFileSizeEx(hIndexFile[SaveFileNo],&FileSize);         // 새로만들어진 파일이다         if(FileSize.QuadPart == 0)         {             // 진행위치 옵셋초기값으로 저장             DWORD Written;             SaveDataIndex Info;             Info.Offset.QuadPart=0;             Info.SendFlag='_';             WriteFile(hIndexFile[SaveFileNo],&Info,sizeof(SaveDataIndex),&Written,NULL);         }              // 읽어올저장파일의 크기를구한다         GetFileSizeEx(hSaveFile[!SaveFileNo],&SavedFileSize);         // 읽어올인덱스파일을 셋팅한다         GetFileSizeEx(hIndexFile[!SaveFileNo],&IndexFileSize);         // 몇개의 데이터가 들어있는지 계산한다         IndexFileItemCnt=(IndexFileSize.QuadPart-sizeof(SaveDataIndex))/sizeof(SaveDataIndex);         if(IndexFileItemCnt < 0)IndexFileItemCnt=0;         // 인덱스데이터가 있으면         if(IndexFileItemCnt > 0)         {             // 파일매핑             IndexFileMapping=CreateFileMapping(                 hIndexFile[!SaveFileNo],                 NULL,                 PAGE_READWRITE,                 0,                 0,                 NULL);                  if(IndexFileMapping)             {                 // 포인터 얻어내기                 IndexFileBase=(BYTE*)MapViewOfFile(                     IndexFileMapping,                     FILE_MAP_READ|FILE_MAP_WRITE,                     0,0,                     0);                 if(!IndexFileBase)                     CloseHandle(IndexFileMapping);             }         }         // 매핑에 실패했을경우         if(!IndexFileBase)             IndexFileItemCnt=0;         // 새로운 저장데이터&인덱스 파일의 파일포인터를 최후미에 갔다둠         SetFilePointer(hSaveFile[SaveFileNo],0,0,FILE_END);         SetFilePointer(hIndexFile[SaveFileNo],0,0,FILE_END);         if(IndexFileItemCnt > 0)             FileChangPerSec++;     }     LeaveCriticalSection(&CS_SaveFile);     LeaveCriticalSection(&CS_ReadFile);      }


위에껀 오토바이사고로 두다리 부러졌을대 마약성 진통재 먹으면서


만든코드인데 지금보니 신기함


소스가 긴대 DC  업로드 한계때문에 잘라내다보니 얼마  표시못함


서버 안되면 ㅈ된다는 압박감과  만드는재미 크...


재미나고 좋음