2013-08-07 111 views
1

我無法正確刪除定時器隊列。我總是得到以下錯誤:Timer.exe中的0x77a915de未處理的異常:0xC0000005:訪問衝突讀取位置0x00000020。刪除定時器隊列定時器

我有一個簡單的計時器回調函數:

void CALLBACK TimerProc(void* lpParameter, BOOLEAN TimerOrWaitFired) 
{ 
    cout << "The timer is working!" << endl; 
} 

這裏是我創建和刪除計時器我的主要功能:

int main(int argc, char *argv[]) 
{ 
    HANDLE hTimer; 

    // Create timer 
    CreateTimerQueueTimer(
          &hTimer,       // Timer handler 
          NULL,       // Default timerqueue 
          (WAITORTIMERCALLBACK)TimerProc, // Callback function 
          0,           
          0, 
          (DWORD)2000,      // Period value = 2 seconds 
          WT_EXECUTEINTIMERTHREAD); 

    // Do other tasks 
    // e.g. Sleep(10000); 

    // Delete Timer 
    if (!DeleteTimerQueueEx(hTimer, NULL)) 
    { 
     cout << GetLastError() << endl; 
    } 

    return 0; 
} 

調試器總是停在DeleteTimerQueueEx線。爲什麼會發生這種故障?

+0

hTimer的價值是什麼?我懷疑-1 – drescherjm

+3

您正在添加到默認計時器隊列中,因爲您並未創建自己的(CreateTimerQueue)和IIRC,因此您無法刪除它,而是刪除計時器本身(DeleteTimerQueueTimer) - 或者如果要分組多個計時器,請創建自己的隊列。 –

+0

hTimer的值是一個正整數。 @Alex K.:(DeleteTimerQueueTimer)正常工作。 – Tomi

回答

3

您並未創建自己的隊列(CreateTimerQueue),而是將您添加到不可刪除的默認計時器隊列中,而是刪除計時器本身(DeleteTimerQueueTimer)。

如果您想分組多個計時器,請創建您自己的隊列,然後您可以隨後刪除它。