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 行で停止します。なぜこの障害が発生するのですか?

4

1 に答える 1

4

独自のキューを作成するのCreateTimerQueueではなく ( )、削除できないデフォルトのタイマー キューに追加するのではなく、タイマー自体を削除します ( DeleteTimerQueueTimer)。

複数のタイマーをグループ化する場合は、後で削除できる独自のキューを作成します。

于 2013-08-07T14:00:38.687 に答える