Как мне использовать SetTimer в не диалоговом .cpp в моем приложении MFC? - PullRequest
2 голосов
/ 20 июля 2011

У меня вопрос к обычному mfc SetTimer, как показано ниже

void CTimersDlg::OnButtonBegin()
{
    // create the timer

    SetTimer(m_nTimerID, uElapse, NULL);
}

void CTimersDlg::OnButtonStop()
{
    // destroy the timer
      KillTimer(m_nTimerID);
}

void CTimersDlg::OnTimer(UINT nIDEvent)  // called every uElapse milliseconds
{
    // do something, but quickly
    CDialog::OnTimer(nIDEvent);
}

, но если мне нужно использовать SetTimer в non dialog.cpp, например, в моем sender.cpp, как мне создать таймер?Как и в полях SetTimer, функция обработчика (обратного вызова)?

Ответы [ 2 ]

5 голосов
/ 20 июля 2011

Вы можете передать NULL в качестве дескриптора окна и включить функцию обратного вызова в вызов SetTimer. Это позволит вам получать уведомления по таймеру, не связывая его с конкретным окном.

Если таймер предназначен для использования в отдельном «рабочем» потоке (один без окна), вам все равно нужно будет обработать очередь сообщений для получения уведомлений таймера. Если вы создаете поток, используя объект CWinThread, это уже обработано для вас в реализации по умолчанию CWinThread::Run.

Если вы можете обновить свой вопрос, включив в него дополнительную информацию о содержании sender.cpp, я могу привести более подходящий пример. При этом используется простой Windows API для создания таймера и обработки необходимой очереди отправки.

// Example only.
VOID CALLBACK timerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
    printf("Timer called\n");
}

void SomeFunc()
{
    SetTimer(NULL, 1, 1000, timerCallback);

    MSG msg;

    // msg-pump
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
2 голосов
/ 20 июля 2011

SetTimer связан с окнами, вам нужен дескриптор окна, чтобы использовать его.Для не оконных классов вы должны рассмотреть возможность использования CreateWaitableTimer или использование TimerQueue

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