|
|
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
в наличии : Forms 6i + Oracle 8/10 проблема : глюки при длительной работе формы с повторяющимся таймером теперь подробнее : есть форма, которая запущена на компе постоянно (в течении рабочего времени) и в ней создан таймер срабатывающий через 1 секунду, со свойством REPEAT, пишущий лог в файл на диске на сотне компов, за пару недель такого логгирования, замечено несколько раз, что таймер сдыхал, то есть переставал работать просто напросто кто-нить сталкивался/решал как-то проблему ? покопавшись в дебаггере ifrun60.exe+форма_с_таймером понял что форм для повторяющегося REPEAT таймера использует WinApi функции SetTimer/KillTimer то есть вызов declare T Timer; begin T:=Create_Timer('zzz',1000,REPEAT) end; -создает некую структурную переменную в Forms с параметрами имя таймера, его номер в windows, период срабатывания, и зацикленность -вызывается WinApi.SetTimer которая физически создает таймер в windows с необходимым периодом срабатывания и процедурой обработки с бредовым названием (уже и не помню - назовем А) -в переменной T сохраняется номер таймера в windows (ID) -через секунду таймер сработает и вызовется процедура A, которая посылает в формс сообщение чтобы сработал триггер WHEN-TIMER-EXPIRED и устанавливает у приложения свойство сработанного таймера, чтобы Get_Application_Property(Timer_Name) нам его мог вернуть -потом таймер в windows с номером ID удаляется при помощи WinApi.KillTimer и заново создается WinApi.SetTimer НО! уже с новым номером ID и так по циклу последние 3 шага пока мы не выйдем из формы или не убьем таймер в формсе при помощи delete_timer не могу 100% гарантировать что нутрянка в формс так и работает, но приблизительно должно быть похоже чисто теоретически, единственное узкое место, это WinApi.SetTimer - на каком-нить шаге она может не создать таймер ( windows - что с нее взять :( ), и вся цепочка летит к чертям формс думает что в переменной T есть все параметры таймера и Find_Timer('zzz') вернет нам что он есть, однако в windows он не создан ! и потому до срабатывания в формс When-Timer-Expired дело не доходит ! PS попробую в ближайшее время -вставить в форму код по пересозданию таймеров, если они померли, при помощи delete_timer + create_timer -извне подлавливать, что в форме подохли таймеры, и посылать ей сообщение о чтобы она пересоздала таймеры -отослать юзерам для тестирования, потому как сами вйти на такую ситуацию с подыханием триггеров не смогли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 15:04 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
mdvvв наличии : Forms 6i + Oracle 8/10 проблема : глюки при длительной работе формы с повторяющимся таймером А чем плох одноразовый таймер, который каждый раз создается заново? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 16:55 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
>>А чем плох одноразовый таймер, который каждый раз создается заново? возможно и ничем но 1) create_timer(REPEAT), по идее, я вызвал один раз и забыл а create_timer(NO_REPEAT) будет вызываться с определенной периодичностью, при инициализации формы и в самом триггере W-T-E 2) а кто гарантирует что при очередном создании таймера в триггере W-T-E он не создастся по какой либо причине, ну и все ! приехали, цикл на этом прерван create_timer(REPEAT) в этом плане надежнее, imho но это все чисто теоретически поэтому я и обратился с вопросом, может кто в таком режиме таймеры и использовал и поимел соответсвующие проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 17:13 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
у нас работает без репита с постоянным крейтом, описанного не замечалось попробуйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 17:40 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
>>у нас работает без репита с постоянным крейтом, описанного не замечалось 1) в каком режиме - 24/7 ? 2) forms 6 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 17:45 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
mdvv>>у нас работает без репита с постоянным крейтом, описанного не замечалось 1) в каком режиме - 24/7 ? 2) forms 6 ? да и да перезапускаем только когда обновления ставим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 17:54 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
>>у нас работает без репита с постоянным крейтом, описанного не замечалось на каком количестве рабочих мест это оттестировано ? и какова вероятность что если таймер подохнет, это заметит юзер ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 18:04 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
ну у нас наверно для других целей используются такие формы, как обработчики событий, раз в определенное время запускаются какие-либо действия в итоге каждая форма запущена 1 раз, ну и форм таких около двадцати, но я думаю от одновременного кол-ва не зависит, скорее от времени, у нас больше чем 1 секунда, поэтому с уверенностью сказать не могу, но попробовать стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 18:15 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
>>у и форм таких около двадцати, но я думаю от одновременного кол-ва не зависит дело не в одновременном количестве, а именно в количестве вариаций комп+винда+формс+юзер+ситуация то есть чем больше юзеров, тем больше выявленных глюков :) >>как обработчики событий, раз в определенное время запускаются какие-либо действия у нас другие цели для головной программы была разработана форма, которая запускается отдельной сессией, для инфо-окон, вопросов-ответов, логов, прогресс-бара и тд и тд, для того чтобы и из любой процедуры формса/БД можно было без разбиения процесса получить реакцию юзера на какое-то событие работает через dbms_pipe и все отлично, всо отлажено-проверено, если б не эти таймеры (которые раз в секунду проверяют каналы) вот они чуток портят картину, делаю нестабильным работу всего механизма ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2009, 18:49 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
mdvv и все отлично, всо отлажено-проверено, если б не эти таймеры (которые раз в секунду проверяют каналы) вот они чуток портят картину, делаю нестабильным работу всего механизма "многоразовый таймер >одноразовый таймер с перезапуском. Среда разработки не важна." из личного ДАО. Оффтопик on И вообще, может здесь здесь совсем не таймер нужен? Тут подумалось> пяйп имеет дурную привычку переполняться. Вы уверены что проблемы именно в таймере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 14:15 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
>>Оффтопик on >>И вообще, может здесь здесь совсем не таймер нужен? есть предложения ? бесконечный loop - end loop с заморозкой процесса на 1 сек для опроса пайп-канала нагружает проц да и калечно все это таймер в этом плане самое-то >>Тут подумалось> пяйп имеет дурную привычку переполняться. вы о ORA-06558 ? у нас пайп-канал после отсылки сообщения и приема контрольного-сообщения о доставке чистится, к тому же у нас все exception ловятся и логгируются >>Вы уверены что проблемы именно в таймере? ну 100% уверять не могу у нас есть софт, который висит круглосуточно на объектах у всех клиентов и принимает/проводит изменения в проект, аналогично опрашивает почтовые ящики раз в 15минут так вот и там тоже таймер иногда (раз в меся-два-три, у некоторых клиентов) перестает работать приходится перезапускать, благо терминалы ко многим пробиты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2009, 17:15 |
|
||
|
Forms + Timer = ?
|
|||
|---|---|---|---|
|
#18+
mdvv>>Оффтопик on >>И вообще, может здесь здесь совсем не таймер нужен? есть предложения ? бесконечный loop - end loop с заморозкой процесса на 1 сек для опроса пайп-канала нагружает проц да и калечно все это таймер в этом плане самое-то OAQ например. mdvv у нас есть софт, который висит круглосуточно на объектах у всех клиентов и принимает/проводит изменения в проект, аналогично опрашивает почтовые ящики раз в 15минут так вот и там тоже таймер иногда (раз в меся-два-три, у некоторых клиентов) перестает работать приходится перезапускать, благо терминалы ко многим пробиты А оракл джобы по каким прочинам не подошли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2009, 12:27 |
|
||
|
|

start [/forum/topic.php?fid=51&msg=36359220&tid=1879065]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 488ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...