Показать сообщение отдельно
  #3  
Старый 26.11.2013, 16:18
kti kti вне форума
Прохожий
 
Регистрация: 21.11.2013
Сообщения: 10
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Нет. Стандартный таймер можно либо создать, либо удалить - приостановить нельзя.

Спасибо. Жаль конечно. А система нормально отнесется к частому удалению/созданию таймера, не будет "глючить"?

Цитата:
Сообщение от poli-smen
Чтобы не вызывалась повторно процедура до завершения своей работы, сделай переменную и при входе в эту процедуру проверяй её состояние:
Код:
SetTimer(hwnd_1C, Timer_Interval, Timer_Interval, @TimerProc1C); // устанавливаем таймер

var
  TimerEntered: Boolean = False;
.....
function TimerProc1C() 
  if TimerEntered then Exit;

  try
    TimerEntered:=True;

// Делаем что-то

  finally
    TimerEntered:=False;
  end;
end;

Я так делал. Как мне кажется не помогает. На слабом компе, видимо, эти таймеры становятся в очередь, и по освобождению процессора начинают выполнятся по очереди. На компе это видно по торможению, и неадекватной работе. Даже после нажатия кнопки остановки таймера, идет обработка очереди (накопившихся таймеров). И несколько секунд приложение не реагирует..
Все таки решил сделать через KillTimer()/SetTimer()

Попутный вопрос, в конструкции всегда будет вызван finally?

Код:
  if TimerEntered then Exit;
 
  try
    TimerEntered:=True;
 
     try
        // Делаем что-то

     except On E : Exception do
      begin
        // обработка ошибок
        exit; // после этого оператора, будет вызван finally?
      end;
      
      // опять что-то делаем

  end;

  finally
    TimerEntered:=False;
  end;
Ответить с цитированием