2019年8月2日 星期五

[c++]Windows下C的計時器timeSetEvent

Sample:

UINT uRet = timeSetEvent(100, 100, &TimerSaveLog, (DWORD_PTR)this, TIME_ONESHOT);

void CALLBACK TimerSaveLog(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2)
{
if (!dwUser)
return;
return;
}


============================MSDN  分隔線==============================

MSDN裡定義的函數原型如下:

MMRESULT timeSetEvent(UINT uDelay,

                                             UINT uResolution,

                                             LPTIMECALLBACK fptc,

                                             DWORD dwUser,

                                             UINT fuEvent);

udelay的:以毫秒指定事件的週期。
uResolution:以毫秒指定延時的精度,數值越小定時器事件分辨率越高。缺省值為1ms。

fptc:指向一個回調函數。
dwUser:存放用戶提供的回調數據。

fuEvent:指定定時器事件類型:
TIME_ONESHOT:udelay的毫秒後只產生一次事件
TIME_PERIODIC:每隔uDelay毫秒週期性地產生事件。


============================我是分隔線==============================

sample:

#include "stdafx.h"
#include 
<stdio.h>
#include 
<Windows.h>
#include 
<Mmsystem.h>
#pragma comment(lib, "Winmm.lib")
void WINAPI onTimeFunc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2);int _tmain(int argc, _TCHAR* argv[])
{
    MMRESULT timer_id;
    
int n = 0;
    timer_id 
= timeSetEvent(50001, (LPTIMECALLBACK)onTimeFunc, DWORD(1), TIME_PERIODIC);
    
if(NULL == timer_id)
    {
        printf(
"timeSetEvent() failed with error %d\n", GetLastError());
        
return 0;
    }
    
while(n<20)
    {
        printf(
"Hello World\n");
        Sleep(
2000);
        n
++;
    }
    timeKillEvent(timer_id);        
//釋放定时器
    return 1;
}
void WINAPI onTimeFunc(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
    printf(
"time out\n");
    
return;
}



引用來源

沒有留言:

張貼留言

[SQL]顯示千分位與小數顯示

  CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) CONVERT style參數說明 1  (expression為 money 或 smallmoney型別): 0 : 預設,保留小數位後兩位,並四捨...