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为回调函数,为实现预定功能的函数。

发布了91 篇原创文章 · 获赞 75 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/fengxianghui01/article/details/103502660
今日推荐