| 12
 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;
} | 
Partager