powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не срабатывает SetTimer
16 сообщений из 16, страница 1 из 1
Не срабатывает SetTimer
    #39761010
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В программе, в определенный момент, перестают отображаться хинты.

Дебаг привел к методу
Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TApplication.StartHintTimer(Value: Integer; TimerMode: TTimerMode);
begin
  StopHintTimer;
  FTimerHandle := SetTimer(0, 0, Value, HintTimerDelegate);
  FTimerMode := TimerMode;
  if FTimerHandle = 0 then CancelHint;
end;

вызывается SetTimer, FTimerHandle <> 0, но HintTimerDelegate не вызывается.

В чем может быть проблема? Как вообще работает SetTimer когда ему передают нулевое окно? Тоже через сообщения?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761040
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А TApplication.StartHintTimer в потоке, в котором создался TApplication вызвался?
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761067
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRockА TApplication.StartHintTimer в потоке, в котором создался TApplication вызвался?Конечно. Это стандартный механизм VCL. Я только подвожу мышу к кнопке.

Меня прежде всего интересует ответ на вопрос
_Vasilisk_Как вообще работает SetTimer когда ему передают нулевое окно?
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761073
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Как вообще работает SetTimer когда ему передают нулевое окно? Тоже через сообщения?

Да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761079
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovДа.А кому?
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761093
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А кому?

Что, "кому"?
MSDNWhen you specify a TimerProc callback function, the default window procedure
calls the callback function
when it processes WM_TIMER. Therefore, you need to
dispatch messages in the calling thread
, even when you use TimerProc instead of
processing WM_TIMER.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761264
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_В чем может быть проблема? Как вообще работает SetTimer когда ему передают нулевое окно? Тоже через сообщения?
это в отладчике видно, по стеку вызовов
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761358
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_ ,

несколько ссылок нагуглилось, вдруг какая поможет:

SetTimer() Win32 function is not calling callback function
https://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/cf27cbc2-e27e-4b97-8318-890ebc8049ff/settimer-win32-function-is-not-calling-callback-function?forum=windowssdk

SetTimer Callback is Never Called
https://stackoverflow.com/questions/7250034/settimer-callback-is-never-called
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761576
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семёнвдруг какая поможет:Нет. Есть подозрение, что моя проблема в забивании очереди сообщений. И низкоприоритетный WM_TIMER не пролазит. Потому, что все ломается когда идет массовая отправка сообщений главному окну

Хотя обычный TTimer запущенный параллельно - срабатывает
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761588
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у TTimer'a создается свое внутреннее как-бы-окно FWindowHandle := Classes.AllocateHWnd(WndProc);
и используется SetTimer(FWindowHandle, 1, FInterval, nil)
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761590
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Есть подозрение, что моя проблема в забивании очереди сообщений.Не понимаю. В процессе отправки сообщений в TApplication.ProcessMessage приходит куча сообщений с Msg.hwnd = 0 и Msg.Message = WM_TIMER. Но все по другим коллбэкам. По коллбэку HintTimerDelegate сообщения появляются только по завершении моей работы
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761593
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще вот такой ответ был по первой ссылке из моего поста выше:

MattiasWhen you specify a TimerProc callback function, the default window procedure calls the callback function when it processes WM_TIMER. Therefore, you need to dispatch messages in the calling thread, even when you use TimerProc instead of processing WM_TIMER .


Since you don't have a message pump, it's not surprising that your TimerProc isn't called.
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761594
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, может в SetTimer первым параметром поставить не 0, a, например, хэндл MainForm.Handle попробовать
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761596
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неважно какого окна, любого на самом деле, исключительно ради бонуса "dispatch messages"
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761686
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семёнкстати, может в SetTimer первым параметром поставить не 0, a, например, хэндл MainForm.Handle попробовать
_Vasilisk_Это стандартный механизм VCL.Все методы находятся в модуле Forms

Кажется проблема не в несрабатывании таймера, а в его сбросе. Не пойму от чего. А отлаживаться очень сложно
...
Рейтинг: 0 / 0
Не срабатывает SetTimer
    #39761692
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие-то баги отладчика. Запустил без отладчика - все работает
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не срабатывает SetTimer
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]