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