Windows和Linux定時器的使用

timer 1:
/*--------------------windows:----------------------------------*/
方法1:CreateTimerQueueTimer
void process_timer()
{
	HANDLE g_Event = NULL;      // 定時器句柄
	HANDLE hTimer = NULL;
	HANDLE hTimerQueue = NULL;
	g_Event = CreateEvent(NULL, TRUE, FALSE, NULL);

	if (NULL == g_Event)
	{
		return;
	}

	hTimerQueue = CreateTimerQueue();
	if (NULL == hTimerQueue)
	{
		return;
	}
	
	if (!CreateTimerQueueTimer(&hTimer, hTimerQueue, (WAITORTIMERCALLBACK)process_timer_func, NULL, 5000, 3000, NULL))
	{
		return;
	}

	if(WaitForSingleObject(g_Event,INFINITE) !=WAIT_OBJECT_0)

	{
		
		OutputDebugString(_T("WaitForSingleObject失敗。。"));

	}

   
	CloseHandle(g_Event);
	

	if(!DeleteTimerQueue(hTimerQueue))
	
	{
	
		OutputDebugString(_T("DeleteTimerQueue失敗。。"));


	}
}

方法二:timeSetEvent
int process_db_timer()
{
	MMRESULT timer_id;
	int n = 0;
	timer_id = timeSetEvent(delay_unit * 1, 1, (LPTIMECALLBACK)process_db_file_size, (DWORD)(1), TIME_PERIODIC);
	if (NULL == timer_id)
	{
		printf("timeSetEvent() failed with error %d\n", GetLastError());
		return 0;
	}
	return 1;
}
/*--------------------------Linux:------------------------------------------------------*/
void init_time()
{
	signal(SIGALRM, process_db_file_size);
 
    struct itimerval new_value, old_value;
    new_value.it_value.tv_sec = timer_unit;
    new_value.it_value.tv_usec = 0;
    new_value.it_interval = new_value.it_value;
    setitimer(ITIMER_REAL, &new_value, &old_value);
}

上述:Linux中process_db_file_size爲回調函數,爲實現預定功能的函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章