Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Несовсем понятен вопрос, по исходникам вроде нет поскольку минимум Timer Event стартует в основном потоке. Но и абсолютной уверенности тоже нет т.к. используется Код: pascal 1. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 14:48 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Таймеру не нужен отдельный поток. Он живет в вызывающем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 14:56 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Barmaley57 Таймеру не нужен отдельный поток. Он живет в вызывающем. Откуда ты знаешь, как рнализован SetTimer() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 17:04 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Лучше бы спросить "какая буква из документации по ссылке привела аффтара к странному заключению о создании потоков"... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 17:20 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
А вообще, появление / или нет нового потока можно проверить в ProcessExplorer'e создав объект TTimer в рантайме и выставив ему .Enabled :=true ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 17:24 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Barmaley57 Таймеру не нужен отдельный поток. Он живет в вызывающем. Откуда ты знаешь, как рнализован SetTimer() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 17:42 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 18:43 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Очень вряд ли таймер "живет" в вызывающем потоке. Вызывающий поток запросто может уйти в длительный запой расчет, не обращаясь вообще к функциям user32 и kernel32. И как тогда таймер сможет выполнить свою работу и отправить вовремя свое сообщение? SetTimer или запускает новый поток (возможно, не в своем процессе) или, разумнее всего, использует один из готовых системных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 21:55 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
shalamyanskySetTimer или запускает новый поток (возможно, не в своем процессе) или, разумнее всего, использует один из готовых системных. Ну так проведи эксперимент. Нагрузи главный поток чем хочешь и добейся чтобы GetCurrentThreadId в OnTimer вернул что-то отличное от главного. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 21:57 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
shalamyansky Вызывающий поток запросто может уйти в длительный запой расчет, не обращаясь вообще к функциям user32 и kernel32. И как тогда таймер сможет выполнить свою работу и отправить вовремя свое сообщение? Вообще-то, так и происходит. И даже если система из отдельного треда пошлет сообщение вовремя, это ничего не изменит: сообщения из очереди окна сами собой не обрабатываются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:01 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov shalamyanskySetTimer или запускает новый поток (возможно, не в своем процессе) или, разумнее всего, использует один из готовых системных. Ну так проведи эксперимент. Нагрузи главный поток чем хочешь и добейся чтобы GetCurrentThreadId в OnTimer вернул что-то отличное от главного. ОнТаймер - хоть убейся, в "основном" треде. Имхо, тут вопрос о том, как реализован механизм, включаемый апишным вызовом SetTimer(). Хотя, нафига это знать - непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:04 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
авторОперационная система Windows позволяет для каждого приложения создать несколько виртуальных таймеров. Все эти таймеры работают по прерываниям одного физического таймера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:08 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
rgreat авторОперационная система Windows позволяет для каждого приложения создать несколько виртуальных таймеров. Все эти таймеры работают по прерываниям одного физического таймера. И чо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:10 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ сообщения из очереди окна сами собой не обрабатываются. Это да, и это почти нормально, не слишком спешить с обработкой очереди, мы тут важным делом заняты, а пользователи пусть подергаются. Но в данном случае ситуация хуже - тут сообщение даже не будет отправлено. И если, предположим, дело обстоит именно таким образом, вызов какой именно функции выполнит отправку сообщения WM_TIMER, Get/PeekMessage, любой из user32? Коряво как-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:12 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ И чо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:22 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
OnTimer, естественно, работает в основном потоке, поскольку он вызван обработчиком очереди этого основного потока при обработке пришедшего WM_TIMER. Вопрос в том, кто, когда и из какого потока отправил WM_TIMER. И вот очень вряд ли, что отправитель WM_TIMER работал из потока, дернувшего SetTimer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:22 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
shalamyansky ...Но в данном случае ситуация хуже - тут сообщение даже не будет отправлено... Лучше пусть очередь сообщений переполнится? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 22:51 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
shalamyansky OnTimer, естественно, работает в основном потоке, поскольку он вызван обработчиком очереди этого основного потока при обработке пришедшего WM_TIMER. Вопрос в том, кто, когда и из какого потока отправил WM_TIMER. И вот очень вряд ли, что отправитель WM_TIMER работал из потока, дернувшего SetTimer. Ядро устанавливает флаг "timer X сработал" (чтобы очередь не переполнялась), а WM_TIMER пихается в очередь при наличии флага в момент запроса очередного сообщения. Т.е. отправитель - сам поток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2021, 23:03 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис Ядро устанавливает флаг "timer X сработал" (чтобы очередь не переполнялась), а WM_TIMER пихается в очередь при наличии флага в момент запроса очередного сообщения. Да, так работает, все-таки при вызове Get/PeekMessage? Ну, так, значит, так. Я чисто логически рассуждал. Но все равно, должен существовать некий сторонний поток, который флаг "timer X сработал" установит. Только оповещение основного потока о событии переместилось на чуть более ранний шаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 00:00 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
shalamyanskyдолжен существовать некий сторонний поток, который флаг "timer X сработал" установит. Не должен. Вместо флага "таймер Х сработал" может быть флаг "следующий таймер в ХХ:ХХ", который и проверяется функциями выборки. Им всё равно текущее время получать, заодно и очередь таймеров проверят. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 00:25 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ ОнТаймер - хоть убейся, в "основном" треде. Ну, допустим, не в основном, а в том, в котором таймер был создан/инициализирован.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 10:15 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Dimitry Sibiryakov пропущено... Ну так проведи эксперимент. Нагрузи главный поток чем хочешь и добейся чтобы GetCurrentThreadId в OnTimer вернул что-то отличное от главного. ОнТаймер - хоть убейся, в "основном" треде. Имхо, тут вопрос о том, как реализован механизм, включаемый апишным вызовом SetTimer(). Хотя, нафига это знать - непонятно. Он в том треде, в котором вызвано его создание. При создании таймера создается окно, которое будет получать сообщения от ос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 10:17 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
softwarer Ну, допустим, не в основном, а в том, в котором таймер был создан/инициализирован.... Ага. И, раз уж начались разборки, напомню: 18154218 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 11:14 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ, спасибо, любопытно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 11:20 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
wadman При создании таймера создается окно, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 11:33 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ wadman При создании таймера создается окно, Это просто TTimer так сделан, что на каждый тамер свое отдельное окно. Возможно, так сделано, чтобы не заботиться об уникальности id таймера. Интересно, что в самой процере SetTimer() можно не указывать дескриптор окна, но приэтом задать процедуру таймера. При этом, WM_TIMER будет обработан процедурой окна по умолчанию путем вызова этой процедуры таймера, то есть, нужно как-то дернуть диспетчеризацию сообщений текущего треда, чтобы процедура выстрелила, ну и, WM_TIMER таки должен быть отправлен из текущего треда. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 12:04 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ можно не указывать дескриптор окна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 12:34 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
shalamyansky Но все равно, должен существовать некий сторонний поток, который флаг "timer X сработал" установит. Только оповещение основного потока о событии переместилось на чуть более ранний шаг. Этот "сторонник поток" называется "ядро" (либо "планировщик", либо "диспетчер ядра", либо "диспетчер"), кому как нравится. Когда речь идёт про контроль прошедшего времени, диспетчер ядра пробуждается каждый раз при срабатывании системного таймера и анализирует, кому какое событие нужно отправить (или установить флаг). В данном случае после установки флага диспетчер всё равно прервёт ожидание программы, которая висит на вызове PeekMessage в ожидании какого-нибудь события. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 12:42 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Корректнее будет фраза: "При создании объекта TTimer создается окно". Уточнять можно бесконечно долго, если не замечать сути беседы: не смотреть на название темы, не учитывать текст из цитаты и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 13:08 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Во развели тут дискуссию! Окна, трэды. Таймер может и без окна работать. Дергать callback. Установите разрешение таймера в 0 мс и замерьте время срабатывания. Тогда будет понятно, что срабатывание таймера происходит при смене контекста ОСью. ОСь при планировании пробуждает в очередной раз поток. А есть ли у тебя таймеры? Есть. Время вышло? Вышло. Что у нас там: окно задано или колбэк? Окно - отправляем WM_TIMER Колбэк - передаем ему управление. Всё просто. Никакой магии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 13:45 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
09.07.2021 13:45, Barmaley57 пишет: > Всё просто. Никакой магии. Ухнаагийн Хурэлсух! зы: новый президент Монголии Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 13:47 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Barmaley57 Колбэк - передаем ему управление. Да шиш там. Все также WM_TIMER, только не туда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 13:49 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Тогда будет понятно, что срабатывание таймера происходит при смене контекста ОСью. То есть ты утверждаешь, что квант времени в Windows 18.5 миллисекунд, поскольку именно таков квант таймера... Ню-ню... Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 13:51 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
ъъъъъ Barmaley57 Колбэк - передаем ему управление. Да шиш там. Все также WM_TIMER, только не туда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 13:59 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Barmaley57Тогда будет понятно, что срабатывание таймера происходит при смене контекста ОСью. То есть ты утверждаешь, что квант времени в Windows 18.5 миллисекунд, поскольку именно таков квант таймера... Ню-ню... Я не могу ничего сказать насчет того, как работает твой мозг. И почему в нем генерируются такие мысли. Увы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 14:00 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Barmaley57 ъъъъъ пропущено... Да шиш там. Все также WM_TIMER, только не туда. Вот именно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 14:01 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Barmaley57Я не могу ничего сказать насчет того, как работает твой мозг. И почему в нем генерируются такие мысли. Очевидно это потому, что ты нуб и не знаешь, что таймер в Windows ограничен вышеназванным периодом. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 14:15 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, пшолнах (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 14:23 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Ок, начнём с вопроса попроще: есть ли вообще хоть какое-то основание подозревать ядро в участии в работе пользовательских таймеров? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 14:54 |
|
||
|
Создаёт TTimer свой поток или нет?
|
|||
|---|---|---|---|
|
#18+
Вот не поленился, посмотрел. Да, SetTimer - ставит пользовательский таймер. Обработка происходит либо в связке Get/Peek/message+DispatchMessage, либо вместо dispatch обрабатываем ручками WM_TIMER. Нет очереди - не работает таймер. В ядро уходит SetWaitableTimer. Но темы порождения/непорождения потоков это не меняет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2021, 15:26 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037190]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 277ms |
| total: | 544ms |

| 0 / 0 |
