1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| void CXC64IOmodule::StopInputsListener()
{
//On fait ce que tu as mis dans ton code pour arretter les threads
}
HANDLE CXC64IOmodule::LaunchInputsListener(DWORD period, UINT priority)
{
s_bRunThreadInputsListener=TRUE;
if(!s_heventTopTimer)s_heventTopTimer=CreateEvent(NULL,FALSE,FALSE,NULL);
ResetEvent(s_heventTopTimer); //Le thread va donc immediatement se mettre en someil et sera reveillé par le timer
if(!s_htTrigGlobalgrab)s_htTrigGlobalgrab=CreateThread(NULL,0,&InputsListener,&priority,0,NULL); //On le lance
//On crée maintenant le timer
s_hTimerQueue = CreateTimerQueue();
if (!s_hTimerQueue) AfxMessageBox("Probleme de Creation du timer");
CreateTimerQueueTimer(&s_hTimer, s_hTimerQueue, TimerRoutine, NULL , 0, period, WT_EXECUTEINTIMERTHREAD);
return s_htTrigGlobalgrab;
}
//////////////////////////////////////TIMER///////////////////////////////////////////
void CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired)
{
SetEvent(CXC64IOmodule::s_heventTopTimer);
return;
}
//////////////////////////////////////THREADS/////////////////////////////////////////
DWORD WINAPI CXC64IOmodule::InputsListener(LPVOID lpParameter)
{
unsigned int i=0;
UINT* priority = (UINT*) lpParameter;
SetThreadPriority(GetCurrentThread(),*priority);
//Tant qu'on ne demande pas au thread de sortir
while(s_bRunThreadInputsListener)
{
//On attends le top du timer
WaitForSingleObject(s_heventTopTimer,INFINITE);
//Pour toutes les pins d'input
for(i=0 ; i< s_usObjectCount ; i++)
{
//Fait ce qu'il a a faire sur chaque objet
}
}
return 0L;
} |