static void VGA_InstallTimer(unsigned Rate) { if (!VGA_timer_thread) { VGA_timer = CreateWaitableTimerA( NULL, FALSE, NULL ); VGA_timer_thread = CreateThread( NULL, 0, VGA_TimerThread, NULL, 0, NULL ); } QueueUserAPC( set_timer_rate, VGA_timer_thread, (ULONG_PTR)Rate ); }
HOOKFUNC HANDLE WINAPI MyCreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes,BOOL bManualReset,LPCSTR lpTimerName) { HANDLE rv = CreateWaitableTimerA(lpTimerAttributes, bManualReset, lpTimerName); debuglog(LCF_SYNCOBJ|LCF_DESYNC|LCF_UNTESTED|LCF_TODO, __FUNCTION__ " returned 0x%X.\n", rv); EnterCriticalSection(&s_handleCS); std::set<HANDLE>& handles = s_threadIdHandles[GetCurrentThreadId()]; handles.insert(rv); LeaveCriticalSection(&s_handleCS); return rv; }
HOOKFUNC HANDLE WINAPI MyCreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCSTR lpTimerName) { ENTER(); HANDLE rv = CreateWaitableTimerA(lpTimerAttributes, bManualReset, lpTimerName); LEAVE(rv); EnterCriticalSection(&s_handleCS); std::set<HANDLE>& handles = s_threadIdHandles[GetCurrentThreadId()]; handles.insert(rv); LeaveCriticalSection(&s_handleCS); return rv; }
//--------------------------------------------------------------------------- __TROPICALL BTP_Tempo::BTP_Tempo(char *tnome,bool ativarmanual) throw(BTP_Excecao*):BTP_Objeto(tnome) { BTP_Tempo::numtempo++; char a[50]; itoa(BTP_Tempo::numtempo,a,10); strcat(tnome,a); manual=ativarmanual; htimer = CreateWaitableTimerA(NULL, ativarmanual,tnome); ativo=false; intervalo=0; //MessageBoxA(0,tnome,"nome timer",0); }
msg_driven_service::msg_driven_service() :m_semaphore(NULL), m_hthread(NULL), m_b_notify_exit(false), m_timer(NULL), m_ap_event_mgr(NULL) { InitializeCriticalSection(&m_cs); m_semaphore=CreateSemaphoreA(NULL,0,1000,NULL); m_timer=CreateWaitableTimerA(NULL,FALSE,NULL); LARGE_INTEGER start_time; start_time.QuadPart=-1; SetWaitableTimer(m_timer,&start_time,1000,NULL,NULL,TRUE); m_ap_event_mgr.reset(new time_event_mgr); }
HANDLE CreateWaitableTimerExA(LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess) { BOOL bManualReset; bManualReset = (dwFlags & CREATE_WAITABLE_TIMER_MANUAL_RESET) ? TRUE : FALSE; return CreateWaitableTimerA(lpTimerAttributes, bManualReset, lpTimerName); }