'지르기 > 게임' 카테고리의 다른 글
[PSP] 기타루맨 (0) | 2006.06.28 |
---|---|
엘더스크롤4 -오블리비언 (0) | 2006.05.10 |
[PSP] EXIT (0) | 2006.01.20 |
[PSP] DJMAX (0) | 2006.01.20 |
드래곤볼 Z 스파킹 (0) | 2005.12.20 |
[PSP] 기타루맨 (0) | 2006.06.28 |
---|---|
엘더스크롤4 -오블리비언 (0) | 2006.05.10 |
[PSP] EXIT (0) | 2006.01.20 |
[PSP] DJMAX (0) | 2006.01.20 |
드래곤볼 Z 스파킹 (0) | 2005.12.20 |
그전까지 synchronized block구현을
#define __SAUTOLOCK_SCORPED(cs) cs.Lock(); for( int __synchronized_count = 0; __synchronized_count < 1; __synchronized_count++, cs.Unlock() )
이런식으로 사용하고 있었다.
안에서 break를 걸면 문제가 생기지만 그렇게 쓸일은 없고-ㅅ-;
익셉션 처리는 안하므로 별상관없고...라고 생각하고 있었는데
for문 안에서 사용하는 경우에 for문을 종료할려고 break를 한다던가 continue를 해보리면 먹어버린다는 엄청난 버그가-_-;
게다가 요새는 VERIFY_RETURN식으로 쓰는게 많아서 불안한 부분도 꽤 있다.
이에 대해 gpg에 여러 글들이 올라오는 와중에 획기적인 해결방법이 나왔다.
synchronized block in C++
http://ricanet.com/new/view.php?id=blog/050807
improved synchronized block in C++
http://ricanet.com/new/view.php?id=blog/050811a
코드도 상당히 깔끔하며 여러가지 문제점을 쉽게 해결을 해주는 솔루션이다...
역시 세상은 넓다
클립보드에 텍스트 넣기/빼기 (1) | 2007.02.14 |
---|---|
서브버전 로그 꼭 남기게 하는 팁 (2) | 2007.01.05 |
최상위 비트 인덱스 가져오기 (0) | 2006.05.02 |
Fast User Switching을 지원하는 응용 프로그램 만들기 (0) | 2006.03.28 |
시스템 이미지 가져다 쓰기 (1) | 2006.03.06 |
_BitScanReverse, _BitScanReverse64
#pragma intrinsic(_BitScanReverse)
를 꼭 같이 써주도록 하쟈
서브버전 로그 꼭 남기게 하는 팁 (2) | 2007.01.05 |
---|---|
synchronized block in C++ (0) | 2006.05.03 |
Fast User Switching을 지원하는 응용 프로그램 만들기 (0) | 2006.03.28 |
시스템 이미지 가져다 쓰기 (1) | 2006.03.06 |
VS2005 실행모듈 배포하기 (1) | 2006.02.14 |
2차클베 종료 (0) | 2006.08.14 |
---|---|
업무근황 (0) | 2006.06.30 |
Closed Beta 1 종료 (0) | 2006.04.29 |
과연 (0) | 2006.04.27 |
클베 직전 막판 뒤집기 (0) | 2006.04.25 |
아아... 처음으로 해본 클로즈 베타가 종료되었다.
머 물론 내부 테스트가 부족했으니까 버그가 많았던 거였겠지만..
사실 다운버그들이 몇달전부터 발견됐지만 발생확률이 너무 적어서 사내테스트를 진행하면서도 정확한 케이스를 발견하지 못했던 것들이다.
그것들이 유저가 많이 들어오자 상당한 빈도수로 발생이 되었고 내부테스트로는 할 수 없는 범위를 좁혀나가는 방식의 범죄수사(?) 가 가능해졌다.
결국.. 조사하면 닭나오는거다.
문제가 생긴 부분은 이전에 다른 프로젝트에서 외부 서비스로 검증을 해보지 못한 새로운 시도를 한 부분들이었고..
어쨋건 다행인건 테스트 기간중에 버그를 수정했고 패치해서 검증까지 완료했다는거다...
유저들이 테스트의 목적을 얼마나 이해할지는 모르겠지만 테스트의 목적은 유저에게 당위성을 부여해서 끌고나가는게 목적이 아니라 게임의 시스템을 어떻게 받아들이냐...하는 것이었다..
이게 이렇게 될거 같으면 무슨 의미가 있냐...하는 당위성이 아니라.. 시스템 자체에 매력이 있는가..를 판단하기 위한 테스트였고...
자세한건 분석을 해봐야 겠지만 꽤 의미가 있었던 테스트였던 것 같다.
다음주부터는 요구분석에 의한 시스템 변경과 쌓아놨던 코드 리뷰와 리펙토링, 그리고 다음 스펙의 개발들이 이어질테니
여전히 바쁜 나날이 되겠다...
머 언제는 안 바쁜적이 있나...
대부분의 다운버그는 어제 모두 패치되었고
패치버그와 연출동기화 버그도 모두 수정되었다...
과연 내일은 정상적으로 게임이 될것인가..
오늘은 다행히 3시간정도는 잘 수 있을 듯 하다
IK적용 스샷 (2) | 2006.04.29 |
---|---|
Closed Beta 1 종료 (0) | 2006.04.29 |
클베 직전 막판 뒤집기 (0) | 2006.04.25 |
오늘은 클베날 (0) | 2006.04.25 |
클베 1주일전 (0) | 2006.04.18 |
전투쪽에 심각한 논리적 오류를 발견하여 결국 비몽사몽간에 전투 코어와 크리쳐 코어에 메스를 대고 말았다 orz
이런 경우는 보통 정신차리고 보면 누가 이따위로 코딩을 해놨어!! 인 경우가 많은데-0-;
흐음...좀있다가 엔진코어도 손대야 되는데-_-ㅋ
불현듯 심각한 오류의 90%는 직전에 수정한 코드들에서 나온다...라는 명언이 생각난다..-ㅅ-;
Closed Beta 1 종료 (0) | 2006.04.29 |
---|---|
과연 (0) | 2006.04.27 |
오늘은 클베날 (0) | 2006.04.25 |
클베 1주일전 (0) | 2006.04.18 |
2 Chain IK (0) | 2006.02.14 |
과연 (0) | 2006.04.27 |
---|---|
클베 직전 막판 뒤집기 (0) | 2006.04.25 |
클베 1주일전 (0) | 2006.04.18 |
2 Chain IK (0) | 2006.02.14 |
CPPTooltip (0) | 2005.11.23 |
하드코딩은 도배되고
레거시 코드는 넘쳐나고
클베끝나고 즉시! 해야 할 리스트는 쌓여만 간다...
그나마 파일패킹이나 기본 암호화 같은 것들은 다 넣었다는 걸로 위안을 갖지만..(그나마도 임시땜질 난무지만-_-)
아직도 할일은 태산같이 쌓여있고...
체력은 이미 바닥난지 오래다..
개발 경력 5년이 약간 넘은 지금 처음 해보는 클베다-0-;;
걱정 반, 절망 반, 포기 반 대략 150% 부정적인 상태 크하하
과연 (0) | 2006.04.27 |
---|---|
클베 직전 막판 뒤집기 (0) | 2006.04.25 |
오늘은 클베날 (0) | 2006.04.25 |
2 Chain IK (0) | 2006.02.14 |
CPPTooltip (0) | 2005.11.23 |
컴파일시 대상 운영체제를 WindowsXP로 설정합니다. |
case WM_WTSSESSION_CHANGE: |
3. Fast User Switching 시 응용 프로그램에서 해야 할 일 -2
이러한 Fast User Switching을 잘 지원하기 위해서, 개발자는 아래의 것들을 응용 프로그램 개발시 고려해야 합니다.
인스턴스 관리
개발자가 응용 프로그램의 인스턴스가 단 하나만 동작하기를 원하는 경우, 아래의 경우를 고려해야 합니다.
FindWindow 혹은 FindWindowEx를 이용해서 응용 프로그램의 인스턴스를 찾는 경우, 다른 세션에 있는 이 함수들이 다른 세션에 있는 응용 프로그램의 인스턴스까지 찾을 수 없습니다.
뮤텍스 혹은 세마포어 같은 커널 오브젝트를 이용하여 인스턴스를 생성을 확인하는 경우, 이 객체들의 이름 앞에 '\Global\'이라는 접두사를 붙여서, 전역 객체로 선언해야 합니다. 각 세션은 세션 마다 커널 객체들의 네임스페이스가 존재하고, 위의 '\Global\'을 붙이지 않는 객체는 각 세션의 로컬 커널 객체로 선언되어, 다른 세션에 있는 동일한 이름의 뮤텍스 혹은 세마포어를 인식하지 못합니다. 예를 들어 "\Global\MutexTest" 이런 식으로 커널 객체의 이름을 명명해 주어야 합니다.
결국 단 하나만의 인스턴스가 동작하기를 원하는 경우, 전역 뮤텍스 혹은 세마포어을 생성해서, 기존에 이 커널 객체들이 생성이 되었는지의 여부를 이용하여 인스턴스를 생성을 제어해야 합니다.
사용자에 따른 데이타 분리
Windows XP의 이러한 기능 때문에 단일 프로그램을 여러 명의 사용자가 동시에 사용할 수 있고, 이 때문에 응용 프로그램은 사용자 별로 데이타를 저장하는 것이 필요합니다. 이 때 마이크로 소프트는 각 사용자 별로 생성되는 데이타는 각 사용자의 My Document 폴더 밑에 저장하는 것을 권장하고 있습니다. 이 My Document 폴더는 SHGetFolderPath에서 CSIDL_PERSONAL을 인자로 넘겨주어 알 수 있습니다.
마이크로 소프트에서 권장하는 디렉토리들을 좀 더 몇 개만 더 나열하면:
CSIDL_MYPICTURES: 이미지 파일을 저장시에 사용하기를 권장합니다. 각각의 개인마다 다르게 생성됩니다. CSIDL_COMMON_APPDATA: 개인 데이타가 아닌 응용 프로그램의 데이타를 저장할 때 사용하기를 권장합니다. 기본 패스는 C:\Documents and Settings\All Users\Application Data 입니다. CSIDL_LOCAL_APPDATA: 임시 파일등을 저장하기 위해서 사용됩니다. |
레지스트리 저장소의 분리
위의 사용자별 데이타 저장과 연결되는 이야기로서, 사용자들의 데이타를 레지스트리에 저장할 필요가 있을 경우, HKCU (Current User)를 사용하시고, HKLM (Local Machine)을 사용하지 말라고 권장하고 있습니다.
WTSRegisterSessionNotification에서 등록한 윈도우를 Destroy하기 이전에, WTSUnRegisterSessionNotification을 호출해 주시기 바랍니다.
5. 결론
결국 Fast User Switching을 지원하기 위해서는 세션의 변화를 감지해야 하고, 데이타를 각각의 개인별로 분리하며, 전역으로 쓰는 자원에 대해서는 세션의 변화에 따라 어떤 식으로 활용해야 하는 지를 미리 정의해 놓아야 합니다.
6. 참고
http://support.microsoft.com/default.aspx?scid=kb%3Bko%3B310153
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwxp/html/winxpfus.asp
synchronized block in C++ (0) | 2006.05.03 |
---|---|
최상위 비트 인덱스 가져오기 (0) | 2006.05.02 |
시스템 이미지 가져다 쓰기 (1) | 2006.03.06 |
VS2005 실행모듈 배포하기 (1) | 2006.02.14 |
다른 프로그램창 Top으로 올리기 (0) | 2006.01.24 |