1 Вывод из кода обработчика это еще не работа кода . (Как я писал там вполне может быть "иллюзия очереди" )
2 Да гарантии что повторный вызов сработает вовремя работы обработчика нет, но нет и гарантии что повторного срабатывания не будет, а вот это уже критично .
3 "Чистый код" примера это одно, а реальный код приложения другое (тот-же Application.ProcessMessages может вызваться и явно (например для четкого отображения результатов работы обработчика) так и не явно в каких нибудь "дебрях LCL" )
Добавлено спустя 22 минуты 40 секунд:xchgeaxeax писал(а):Если вы хотите говорить о многопоточных программах, то там стандартный TTimer будет вести себя точно также как и в однопоточной. А вот множественные срабатывания процедур обработки таймеров возможно только если вы из разных потоков назначили разные таймеры на один обработчик.
Разумеется это правда и именно это я имел ввиду когда писал о "одноразовом таймере " (создали, отработал, остановился и "само убился" ) - но незабываем что создание и запуск таймеров происходит в другом потоке(относительно кода обработчика), однако, разумеется это работает если создание таймера не происходит слишком часто, иначе все быстро упрется в лимит таймеров .
Но справедливости ради, стоит отметит, что вызвать в обработчике все тот-же "Application.ProcessMessage" никто (и ничто) вроде не запрещает, так что "одноразовый таймер" вполне может быть один на каждый поток, что разумеется будет надежнее (бо черт его знает, что будет, если создание таймеров как-нибудь криво "пересечется во времени" ).