以毫秒为单位创建计时器队列

时间:2014-01-30 07:36:57

标签: c windows performance winapi timer

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毫秒的毫秒执行但是当我运行应用程序时,它执行得非常慢。有人可以找出错误吗?

1 个答案:

答案 0 :(得分:0)

在对CreateTimerQueueTimer的调用中,停止将“period”乘以1000。否则,您指定秒而不是毫秒。

换句话说,改变这一行:

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

对此:

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