rendered paste bodytypedef struct tagMYCRITSECT{ BOOL bIn; HANDLE hNeedToWakeUp[128]; int iThreadsCount;} MYCRITSECT; *LPMYCRITSECT;LPMYCRITSECT CreateCritSect(){ return GlobalAlloc(GPTR, sizeof(MYCRITSECT));}void EnterCritSect(LPMYCRITSECT CritSect){ if(CritSect->bIn) { CritSect->hNeedToWakeUp[CritSect->iThreadsCount ++] = GetCurrentThread(); SuspendThread(GetCurrentThread()); // = Sleep(INFINITE); but not WinCE } else CritSect->bIn = TRUE;}void LeaveCritSect(LPMYCRITSECT CritSect){ if(CritSect->iThreadsCount) ResumeThread(hNeedToWakeUp[CritSect->iThreadsCount --]) else bIn = FALSE;}