powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создаёт TTimer свой поток или нет?
25 сообщений из 40, страница 1 из 2
Создаёт TTimer свой поток или нет?
    #40082689
hlopotun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Несовсем понятен вопрос,
по исходникам вроде нет поскольку минимум Timer Event стартует в основном потоке.
Но и абсолютной уверенности тоже нет т.к. используется
Код: pascal
1.
function SetTimer; external user32 name 'SetTimer';



Спасибо
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082691
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таймеру не нужен отдельный поток. Он живет в вызывающем.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082729
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barmaley57
Таймеру не нужен отдельный поток. Он живет в вызывающем.

Откуда ты знаешь, как рнализован SetTimer() ?
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082740
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше бы спросить "какая буква из документации по ссылке привела аффтара к странному
заключению о создании потоков"...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082742
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, появление / или нет нового потока можно проверить в ProcessExplorer'e создав объект TTimer в рантайме и выставив ему .Enabled :=true
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082752
Barmaley57
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Barmaley57
Таймеру не нужен отдельный поток. Он живет в вызывающем.

Откуда ты знаешь, как рнализован SetTimer() ?
Не скажу.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082763
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082792
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень вряд ли таймер "живет" в вызывающем потоке. Вызывающий поток запросто может уйти в длительный запой расчет, не обращаясь вообще к функциям user32 и kernel32. И как тогда таймер сможет выполнить свою работу и отправить вовремя свое сообщение?

SetTimer или запускает новый поток (возможно, не в своем процессе) или, разумнее всего, использует один из готовых системных.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082794
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskySetTimer или запускает новый поток (возможно, не в своем процессе) или, разумнее всего,
использует один из готовых системных.

Ну так проведи эксперимент. Нагрузи главный поток чем хочешь и добейся чтобы
GetCurrentThreadId в OnTimer вернул что-то отличное от главного.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082795
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shalamyansky
Вызывающий поток запросто может уйти в длительный запой расчет, не обращаясь вообще к функциям user32 и kernel32. И как тогда таймер сможет выполнить свою работу и отправить вовремя свое сообщение?

Вообще-то, так и происходит.

И даже если система из отдельного треда пошлет сообщение вовремя, это ничего не изменит: сообщения из очереди окна сами собой не обрабатываются.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082797
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
shalamyanskySetTimer или запускает новый поток (возможно, не в своем процессе) или, разумнее всего,
использует один из готовых системных.

Ну так проведи эксперимент. Нагрузи главный поток чем хочешь и добейся чтобы
GetCurrentThreadId в OnTimer вернул что-то отличное от главного.
ОнТаймер - хоть убейся, в "основном" треде.
Имхо, тут вопрос о том, как реализован механизм, включаемый апишным вызовом SetTimer(). Хотя, нафига это знать - непонятно.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082798
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОперационная система Windows позволяет для каждого приложения создать несколько виртуальных таймеров. Все эти таймеры работают по прерываниям одного физического таймера.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082800
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
авторОперационная система Windows позволяет для каждого приложения создать несколько виртуальных таймеров. Все эти таймеры работают по прерываниям одного физического таймера.

И чо?
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082801
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
сообщения из очереди окна сами собой не обрабатываются.

Это да, и это почти нормально, не слишком спешить с обработкой очереди, мы тут важным делом заняты, а пользователи пусть подергаются. Но в данном случае ситуация хуже - тут сообщение даже не будет отправлено. И если, предположим, дело обстоит именно таким образом, вызов какой именно функции выполнит отправку сообщения WM_TIMER, Get/PeekMessage, любой из user32? Коряво как-то.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082803
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
И чо?
А то что доп. потоки не создаются.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082804
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OnTimer, естественно, работает в основном потоке, поскольку он вызван обработчиком очереди этого основного потока при обработке пришедшего WM_TIMER. Вопрос в том, кто, когда и из какого потока отправил WM_TIMER. И вот очень вряд ли, что отправитель WM_TIMER работал из потока, дернувшего SetTimer.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082808
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
shalamyansky
...Но в данном случае ситуация хуже - тут сообщение даже не будет отправлено...

Лучше пусть очередь сообщений переполнится? :)
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082810
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyansky
OnTimer, естественно, работает в основном потоке, поскольку он вызван обработчиком очереди этого основного потока при обработке пришедшего WM_TIMER. Вопрос в том, кто, когда и из какого потока отправил WM_TIMER. И вот очень вряд ли, что отправитель WM_TIMER работал из потока, дернувшего SetTimer.
А вот ты и не угадал.
Ядро устанавливает флаг "timer X сработал" (чтобы очередь не переполнялась), а WM_TIMER пихается в очередь при наличии флага в момент запроса очередного сообщения. Т.е. отправитель - сам поток.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082814
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
Ядро устанавливает флаг "timer X сработал" (чтобы очередь не переполнялась), а WM_TIMER пихается в очередь при наличии флага в момент запроса очередного сообщения.

Да, так работает, все-таки при вызове Get/PeekMessage? Ну, так, значит, так. Я чисто логически рассуждал. Но все равно, должен существовать некий сторонний поток, который флаг "timer X сработал" установит. Только оповещение основного потока о событии переместилось на чуть более ранний шаг.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082817
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyдолжен существовать некий сторонний поток, который флаг "timer X сработал" установит.

Не должен. Вместо флага "таймер Х сработал" может быть флаг "следующий таймер в ХХ:ХХ",
который и проверяется функциями выборки. Им всё равно текущее время получать, заодно и
очередь таймеров проверят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082889
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
ОнТаймер - хоть убейся, в "основном" треде.

Ну, допустим, не в основном, а в том, в котором таймер был создан/инициализирован....
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082890
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ
Dimitry Sibiryakov
пропущено...

Ну так проведи эксперимент. Нагрузи главный поток чем хочешь и добейся чтобы
GetCurrentThreadId в OnTimer вернул что-то отличное от главного.

ОнТаймер - хоть убейся, в "основном" треде.
Имхо, тут вопрос о том, как реализован механизм, включаемый апишным вызовом SetTimer(). Хотя, нафига это знать - непонятно.

Он в том треде, в котором вызвано его создание.
При создании таймера создается окно, которое будет получать сообщения от ос.
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082915
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
Ну, допустим, не в основном, а в том, в котором таймер был создан/инициализирован....

Ага.
И, раз уж начались разборки, напомню: 18154218
...
Рейтинг: 0 / 0
Создаёт TTimer свой поток или нет?
    #40082919
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

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


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