반응형

윈도우 프로그래밍 18

SetEvent(..) & 멀티쓰레드 버그

꽤나 재미있는 버그였다... int tst; //Thread#1 ... WaitForSingleObject(...); printf("%d", tst); ... //Thread#2 ... tst=3; SetEvent(...); tst=4; ... 이 상황에서 Thread#1이 Thread#2를 기다리다가 tst값을 찍을 경우, 찍히는 값은 3일까? 4일까? 이 코드는 전형적으로 시그널을 기다리는 코드로 Thread#1이 Thread#2의 시그널을 기다리고 있다. 그런데 중요한 것은 OS동작이다. 흔희 생각할수 있는, SetEvent(...) 호출한 후의 Context Switching은 바로 일어나지 않을 수도 있다. 이런경우 일정량 만큼 SetEvent(...) 이후의 코드가 실행되다가 Context S..

Win32 과연 어떤 Timer함수를 사용할 것인가?

이 글은 Code Project에 있는 Timers Tutorial을 정리한 것입니다. 우선, 윈도우는 윈도우 CE를 제외하면 리얼타임OS가 아닌 관계로 10ms와 같은 매우 작은 시간에 대한 정확한 처리를 요구하는 건 한계가 있답니다. (쥔장도 자세한 이유는 잘... 흠...) QueryPerformanceFrequency나 QueryPerformanceCounter와 같은 경우는 특정 시간 경과 후 이벤트를 처리하는 것이 주요 쓰임이 아니라 시간과 시간사이의 시간차를 계산하는 것이 주요 쓰임인 관계로 이 글에서는 언급되어 있지 않습니다. 반대로 말하면 시간과 시간사이의 차이를 정확히 측정하려면 QueryPerformanceFrequency를 사용하여야 겠죠? 1. Standard Win32 Timer..

First Chance Exception

SEH(Structured Exception Handler)가 처리하는 Structured Exception을 처리하는 과정에서 디버거가 제공해 주는 정보의 일종입니다. 제가 이해한 동작 메카니즘은 아래와 같습니다. 1. Exception 발생 2. 발생된 Exception 인식 3. First Chance Exception 메세지 발생 4. Exception Handling 5. if {Exception이 정상 처리?} 프로그램 계속 동작 else Second Chance Exception 메세지 발생 //Release모드로 컴파일되어서 작동시 프로그램 Crash를 의미함 내용을 읽다보면 이 API가 Win32API를 의미하는 것인지 유저가 만든 API를 의미하는 것인지 조금 모호하기는 합니다. 즉, ..

Lua R6034 Runtime Error in Visual Studio 2008 in Vista

증상 XP에서 잘 실행되던 소스가 Vista로 옮겨서 컴파일 하고 실행을 하려고 하니 R6034에러가 났다. 원인 Visual Studio 2008에서는 CRT(C RunTime, 일반적으로 컴파일러들이 자동으로 링크하는 기본 C라이브러리를 말함당)를 9.0버전을 사용한다. 하지만 내가 만들고 있던 루아스크립트 엔진이 참조하는 lua5.1.dll은 Visual Studio 2005의 CRT인 8.0버전을 사용한다. 뭐, XP에서는 그냥 루아 5.1버전과 같이 딸려오는 msvcr80.dll을 사용하면 되지만 Vista에서는 잘못된 CRT를 로드했다는 에러를 낸다. 아마도 Vista에선가, .Net에선가 dll 관리 정책의 변화떄문인 듯 보인다. 소위 말하여 WinSxS라는 거... 실행파일 (참조)-> L..

반응형