Возможно ли использовать CallBack вызовы при написании своих классов (на С++, под OS Windows)? К примеру реализовать таймер при использовании Callback в своём классе!? SetTimer(NULL, 0, 1000, (TIMERPROC) TimerProc) void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
Ответ
В общем виде передать указатель на нестатический, наверное, не получится. Но конкретно описываемую Вами задачу можно решить, например, так. Экземпляры классов, которые хотят получать уведомления от таймера регистрируются в некотором словаре, получая при этом идентификатор таймера. Обработчик таймера находит получателя по идентификатору таймера и переадресует вызов ему. Грубый пример:
static int s_counter = 0;
map
static void AdviseToTimer(UINT elapse, ITimerReceiver * pReceiver)
{
receivers[++s_counter] = pReceiver;
SetTimer(NULL, s_counter, elapse, (TIMERPROC) TimerProc);
}
void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) {
receivers[idEvent]->OnTimer();
}
Комментариев нет:
Отправить комментарий