![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Ммм.. Почему не получается запустить таймер например так?
Ведь enabled:=False; работает,от чего же True не работает? ![]() Таймер запускает поток и останавливается,по окончании процедуры его надо опять запустить.. как? ![]() |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Покажи всю TBos.Execute. finally где? До таймера или после? Возможно срабатывает ошибка, которая обрабатывается try и до таймера просто не доходит очередь. Ну и Timer.enabled:=False где? Поток вообще запускается хоть раз?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Coobick |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Да без разницы.. это я просто поторопился в примере..но сути оно не меняет.
Так тоже не пашет.. Да и потом.. Ведь оно же выключает таймер нормально..значит всё "доходит" до него нормально. Но вот надо то как раз наоборот..надо включить..а оно ни как)..
И инди тут не при чём.. вообще таймер не запускается так.. Почему?
Добавлено через 4 минуты и 30 секунд
Про Timer.enabled:=False я к тому это это то работает! А вот Timer1.Enabled:=True; уже нет.. Поток ессно запускается... переходит по ссылке,всё хорошо... и после тишина). |
||||||
|
|||||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Тэкс, в первом примере таймер запустится только если IdHTTP1.Get выдаст ошибку. Если все пойдет гладко, то ничего не запустится, т.к. Except выполняется только если try генерирует ошибку. А вот второй код интересен. Период у таймера нормально установлен? Что у тебя вообще в OnTimer? Может тоже какое условие...
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Да в таймере без разницы что..
Например так.
Ведь если включить и поставить там Form1.Timer1.Enabled:=false; то срабатывает... таймер выключается.. а с True нет.. :( |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Ну во-первых, повторю еще раз, 12-я строка сработает только если 9-я строка выдаст ошибку. Во-вторых, я так понимаю, таймер запускается сразу при старте программы (еще в дизайнере). Тогда не понятно, где же он останавливается? Зачем выполнять 12-ю строку, если там и так True?
В общем, тут слишком много нюансов. Давай, прикладывай проект с примером что не работает. PS. А вообще, зачем останавливать таймер? Проверяешь в OnTimer, а не создан-ли уже поток. Если создан, то ждем еще, если нет, то создаем. И так по кругу. Это сообщение отредактировал(а) Poseidon - 3.1.2011, 16:56 -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Почему если только ошибка? Ведь если надо выключить таймер,оно в ЭТОМ месте его выключает нормально...
Вот пример.. После перехода по ссылке надо что бы включился таймер..
Это сообщение отредактировал(а) Coobick - 3.1.2011, 17:09 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Проблема вроде как в D2010... в D7 говорят работает всё... сам пока не могу попробовать.. Но в чём косяк,должно же быть решение от чего в 2010 не работает?
|
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 18 Всего: 191 |
Coobick, а ничего, что ты работаешь с VCL в дополнительном потоке без синхронизации?
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Rrader, так синхронизация же критична для визуальных компонентов. Для не визуальных можно. Или я чего-то напутал?
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Rrader, но другие пишут что всё работает на д7... только на д2010 от чего то не работает... Или в таком случае может ваш вариант покажите.. ?
|
|||
|
||||
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
поставил щас д7.... и правда всё работает. компилю этот же проект на д2010 и не работает уже. :( в чём косяк интересно?
|
|||
|
||||
Rrader |
|
||||||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 18 Всего: 191 |
Poseidon, это заблуждение, очень кратко поясню почему. Никогда не знаешь, когда нарвешься на грабли, даже вот этот код (который в комментарий при создании нового потока идет), может отлично работать долгое время.
Но иногда программа будет вылетать, или радовать "спецэффектами" - например, в каком-то диалоге шрифт изменится, пропадут компоненты и т.п. Это - результат внутренних повреждений, когда произошел конфликт основного потока и дополнительного. Почему так происходит? Ответ - VCL (не только то, что касается компонентов) в некоторых местах содержит, во-первых, глобальные данные (общий ресурс), во-вторых, обращение к этим данным никак не защищается в плане многопоточности. Общая рекомендация по работе с сомнительным насчет thread-safety кодом изложена в справке Delphi (добавлю также, что речь идет не столько о самой функции Synchronize, сколько о синхронизации вообще):
Ни слова о VCL. Потому что причина ошибок "родилась" до VCL. Теперь смотрим сюда:
Нужно задать себе несколько вопросов. Все ли нам известно о работе метода Get? А может быть такое, что в его недрах используются глобальные данные, которые могут пересекаться с основным потоком? Хм, я не знаю. Наверное, предпочту защититься. Я нарочно взял и этот код прокрутил специально на отлов ошибок. Ну и что - словил AV. С 3-го раза. Те же грабли |
||||||
|
|||||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Coobick |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 16.8.2010 Где: Владимир Репутация: нет Всего: 1 |
Rrader , но как вы объясните что в D7 работает и без "этого"?
В общем делал так.. вроде работает..таймер включается. Правильно ли?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |