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