Тайм-аут сброса - PullRequest
       4

Тайм-аут сброса

0 голосов
/ 03 сентября 2018

Я использую таймер для рисования анимации, но я хочу, чтобы скорость анимации изменялась при вводе пользователем.

В документации API я прочитал:

Дескриптор окна, которое будет связано с таймером. Это окно должно принадлежать вызывающему потоку. Если передается значение NULL для hWnd вместе с nIDEvent существующего таймера, этот таймер будет заменен так же, как будет существующий таймер не NULL hWnd.

Я понял, что должен вызывать функцию SetTimer() без параметра hWnd для сброса таймера, поэтому я сделал:

// объявление функции

void InitiateTimer(HWND hWnd)
{
    SetTimer(hWnd,                          // handle to main window 
        IDT_TIMER,                          // timer identifier 
        1000 / Robot_Settings::getSpeed(),  // 1-second interval / speed 
        (TIMERPROC)NULL);                   // no timer callback 

    timerInitiated = true;
}

void ResetTimer()
{
    SetTimer(NULL,
        IDT_TIMER, 
        1000 / Robot_Settings::getSpeed(), 
        (TIMERPROC)NULL);
}

// вызов функции в WindowProc

    case BUTTON_START:
        stopClicked = false;
        DestroyWindow(hStartButton);
        CreateStopButton(hWnd);
        if (!timerInitiated)
        {
            InitiateTimer(hWnd);
        }
        else if (timerInitiated)
        {
            ResetTimer();
        }
        return 0;

Идея заключалась в том, что при сбросе время ожидания будет пересчитано на основе Robot_Settings::getSpeed(). К сожалению, этого не происходит.

Что я пропустил?

1 Ответ

0 голосов
/ 03 сентября 2018

Я думаю, вы неправильно поняли документы.

Чтобы изменить существующий таймер, вы должны передать ту же комбинацию аргументов hWnd, nIDEvent и lpTimerFunc, что и при первоначальном вызове SetTimer.

Из ссылки :

Если параметр hWnd не равен NULL и окно задано параметром hWnd уже есть таймер со значением nIDEvent, тогда существующий таймер заменен новым таймером.

Также:

Идентификатор таймера nIDEvent специфичен для соответствующего окна. У другого окна может быть свой таймер с идентичным идентификатором таймер, принадлежащий другому окну. Таймеры различны.

Одна только последняя цитата является достаточным доказательством того, что вам всегда нужно указывать параметр hWnd, чтобы изменить существующий таймер, связанный с окном. В противном случае, как система должна знать, какой таймер вы хотите изменить? У вас может быть два окна, каждое с идентификатором таймера 1, которые представляют собой два разных таймера!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...