2014-01-30 51 views
0
HANDLE TimerTask(unsigned int period,WAITORTIMERCALLBACK task, void* arg); 
void main() 
{ 
HANDLE h1,h2,h3; 

double Task2ms_Raster, Task10ms_Raster, Task100ms_Raster ; 

    h1=TimerTask(2,TASK1,&Task2ms_Raster); 
h2=TimerTask(10,TASK2,&Task10ms_Raster); 
h3=TimerTask(100,TASK3,&Task100ms_Raster); 
} 

HANDLE TimerTask(unsigned int period,WAITORTIMERCALLBACK task,void* arg) 
{ 


    HANDLE HTimer =NULL; 

    //set the timer to call the timer routine 
    if(!CreateTimerQueueTimer(&HTimer, NULL, (WAITORTIMERCALLBACK)task,(PVOID) arg, 0, period*1000, 0)) 
    { 
     printf("CreateTimerQueueTimer failed (%d)\n", GetLastError()); 
     return NULL; 
    } 


    return HTimer; 
} 

我創建了一個處理程序來處理三個任務TASK1,TASK2和TASK3(函數定義未顯示)。應該每2ms,10ms和100ms調用TASK1,TASK2和TASK3。我在上面的代碼週期* 1000中指定了毫秒執行,但是當我運行應用程序時,它執行得非常慢。任何人都可以請識別錯誤?以毫秒爲單位創建計時器隊列

+0

的錯誤:Windows不是一個實時系統。如果你想要更好的定時器,你應該使用多媒體定時器並調用「timeBeginPeriod(1)」。 –

回答

0

在對CreateTimerQueueTimer的調用中停止乘以「句點」1000。否則,您指定的是秒數而不是毫秒。

換句話說,改變這一行:

if(!CreateTimerQueueTimer(..., period*1000, 0)) 

要這樣:

if(!CreateTimerQueueTimer(..., period, 0))