
Jinak nejlepší výsledky dává tato konstrukce časovače:
At se daří ... tímto jsem dosáhl 1 ms tedy 1kHz#define TARGET_RESOLUTION 5
TIMECAPS tc;
UINT wTimerRes;
if(timeGetDevCaps(&tc,sizeof(TIMECAPS))!=TIMERR_NOERROR) return FALSE;
wTimerRes=min(max tc.wPeriodMin,TARGET_RESOLUTION),tc.wPeriodMax);
timeBeginPeriod(wTimerRes);
// spuštění vlákna časovače LPT
Pulse_Event=CreateEvent(NULL,TRUE,FALSE,NULL);
Exit_Event=CreateEvent(NULL,TRUE,FALSE,NULL);
SM_Thread=::CreateThread(NULL,0,LPT_ThreadProc,LPVOID(this),0,&SM_ThreadID);
if(SM_Thread==NULL) return FALSE;
a ve vláknu při jeho inicializaci nastavit
HANDLE Proc=GetCurrentProcess();
DWORD OldPC=GetPriorityClass(Proc);
SetPriorityClass(Proc,HIGH_PRIORITY_CLASS);
int OldTP=::GetThreadPriority(SM_Thread);
SetThreadPriority(SM_Thread,THREAD_PRIORITY_HIGHEST); //THREAD_PRIORITY_TIME_CRITICAL);
avlastní spuštění časovače pak funkcí
TimerID=timeSetEvent(msPeriod,0,(LPTIMECALLBACK)Pulse_Event,0,TIME_PERIODIC|TIME_CALLBACK_EVENT_PULSE);
