![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ProcessMessages [D6, D7, NT4, WinXP]
dmirror © (2006-10-31 14:08:00)В чистом приложении вызов Application.processmessages работает.
Создаю поток
type
TServiceThread = class(TThread)
public
procedure Execute; override;
end;
---
var
ServiceThread: TServiceThread;
и на processmessages компилятор начинает ругаться что не видит такой функции.
что может быть и как исправить?
Eraser (2006-11-02 16:13:00) [21]> [69] YuRock © (02.11.06 15:48)
его нельзя использовать в обоих потоках одновременно.
YuRock (2006-11-02 15:48:00) [22]
> Сергей М. © (02.11.06 15:41) [68]
> Речь идет об обращении к одному и тому же (уже
> существующему !) объекту TApplication в контексте более
> чем одного потока процесса
Т.е. если объект создан в потоке X, то в потоке Y его использовать нельзя. Так?
Сергей М. (2006-11-02 15:41:00) [23]
> YuRock © (02.11.06 15:37) [67]
Причем здесь выделение, дружок ?
Речь идет об обращении к одному и тому же (уже существующему !) объекту TApplication в контексте более чем одного потока процесса
YuRock (2006-11-02 15:37:00) [24]
> Сергей М. © (02.11.06 15:29) [66]
> > YuRock © (02.11.06 15:11) [65]Если ты, дружок ситный,
> завел всю эту безапелляционную трындельню, то ты, дружок
> ситный, должен при этом понимать, что объект Application,
> чей метод ProcessMessages вызывается в потоке X, должен
> быть создан не иначе как в контексте потока Х.В противном
> случает цена твоей трындельне - три копейки в базарный день)
А, что, по твоему есть разница, в каком потоке выделять память? :)))))))))))))
Сергей М. (2006-11-02 15:29:00) [25]
> YuRock © (02.11.06 15:11) [65]
Если ты, дружок ситный, завел всю эту безапелляционную трындельню, то ты, дружок ситный, должен при этом понимать, что объект Application, чей метод ProcessMessages вызывается в потоке X, должен быть создан не иначе как в контексте потока Х.
В противном случает цена твоей трындельне - три копейки в базарный день)
YuRock (2006-11-02 15:11:00) [26]
> @!!ex © (01.11.06 20:36) [63]
> Помоему уже раз 10 на примерх показали, почему не стоит
> обращаться к незащищенным переменным и методам из разных
> потоков.
Пока что был только 1 пример - мой, со 100% работающим кодом с ProcessMessages из другого потока.
Остальное - только рассуждения и предположения, не более того.
Если ошибаюсь, или я слепой - напиши номер поста с этими примерами. Желательно - 10-ти примеров. Касающихся сути вопроса, естественно. А почему так делать иногда нельзя - думаю, что знаю это не хуже тебя.
Подчеркиваю - иногда !
Ты ведь пользуешься переменной IsMultiThreadв резных потоках, и не засовываешь обращения в CS? Или DecimalSeparator? И таких примеров - действительно миллион. Так зачем чушь нести? И какое это все вообще имеет отношение к теме вопроса?
Leonid Troyanovsky (2006-11-01 21:00:00) [27]
> @!!ex © (01.11.06 20:36) [63]
> Помоему уже раз 10 на примерх показали,
Маловато будет.
--
Regards, LVT.
@!!ex (2006-11-01 20:36:00) [28]Помоему уже раз 10 на примерх показали, почему не стоит обращаться к незащищенным переменным и методам из разных потоков.
Leonid Troyanovsky (2006-11-01 19:21:00) [29]
> YuRock © (01.11.06 18:14) [60]
> потом подростешь - поумнеешь" меня не полностью удовлетворил
Да, это так оно и есть. Подрастают, но не умнеют.
Отсюда и произрастает неудовлетворенность.
--
Regards, LVT.
Eraser (2006-11-01 18:19:00) [30]> [59] YuRock © (01.11.06 18:06)
> Приводя примеры глюков компилятора D7 и выше, на которые
> я натыкался.
imho 7 - самая стабильная после 3 версия, хотя пользуюсь 10 )
> Ну, переходить на версию деолфей больше 6 я не собираюсь
если кода много переписывать прийдется, тоже не вижу смысла, лучше сразу на C# %-)
> > человек, который
> > возможно в будущем будет заниматься поддержкой/развитием
>
> > данного кода может быть не в курсе тонкостей.
>
>
> А вот за такое с работы попереть могут :)
могут! если он не найдет ошибку, а если найдет, то сразу же перепишет как надо, при этом матеря аффтора того кода )
> Других причин (вроде запрета вызова метода VCL-объекта из
> другого потока, ловля блох в последовательных проверках
> существования объекта и его теоретического уничтожения между
> проверками) я не вижу.
а я не вижу гарантии, что в следующей версии VCL, туда не запуздырят какую-нибудь инструкцию, из-за которой данный код будет "падать". Ведь было же такое и не раз, не мне вам рассказывать.
YuRock (2006-11-01 18:14:00) [31]> @!!ex
> Eraser
Да, и почему вы решили, что я - за использование Application.ProcessMessages в других потоках? Это удобно, лишь если есть желание компилить проект на Кайликсе. Да и то - сомнительно.
Просто прозвучало утверждение: "Не вздумай!!!..."
А когда я знаю, что это точно можно, а мне говорят, что точно нельзя, я задал вполне логичный вопрос: "Почему?"
И, естественно, ответ типа "Пока поверь мне на слово, а потом подростешь - поумнеешь" меня не полностью удовлетворил :)
YuRock (2006-11-01 18:06:00) [32]
> Eraser © (01.11.06 17:20) [52]
> за такое "с умом" с работы попереть могут. я бы призадумался о компетенции такого работника.
Ок, я задумаюсь над своей компетенцией :)
> учти, что даже если тебе полностью понятно,
> как работает этот код в текущей версии VCL,
Ну, переходить на версию деолфей больше 6 я не собираюсь, и все мысли подчиненных на эту тему обрезаю накорню. Приводя примеры глюков компилятора D7 и выше, на которые я натыкался. Да, обойти их можно, но перелопачивать 70 мегабайт кода никто не будет.
> человек, который
> возможно в будущем будет заниматься поддержкой/развитием
> данного кода может быть не в курсе тонкостей.
А вот за такое с работы попереть могут :)
Игорь Шевченко (2006-11-01 18:01:00) [33]@!!ex © (01.11.06 17:51) [56]
К сожалению, падающие раз в месяц проги обычно падают по иным причинам, нежели ProcessMessages, вызванный из другого потока.
Кроме того, программы обычно тестируют, как ни странно, выявляя массу ошибок и прочего непредсказуемого поведения.
Я бы не стал рекомендовать использование Application.ProcessMessages из другого потока только по одной причине - это неочевидный код. А любой неочевидный код должен найти свое законное место в корзине.
Других причин (вроде запрета вызова метода VCL-объекта из другого потока, ловля блох в последовательных проверках существования объекта и его теоретического уничтожения между проверками) я не вижу.
YuRock (2006-11-01 17:59:00) [34]
> А когда прога падает раз в месяц и никто не может понять
> почему....
Мои проги не падают - я же говорил :)
Без перезапуска работают месяцами, пока винда не "попросит" перезагрузки из-за того, что юзер в какую-нибудь игру поиграл или еще что...
@!!ex (2006-11-01 17:51:00) [35]Это придирка к примеру, не я его придумал. :)
ДА. Согласен. В таких слуаях AV ОЧЕНЬ редко, но всеже имеет место быть.
И это не есть гуд.
Такие AV хуже всего ловятся.
А когда прога падает раз в месяц и никто не может понять почему.... Программисты получают втыки.
Игорь Шевченко (2006-11-01 17:49:00) [36]@!!ex © (01.11.06 17:46) [54]
Особенно интересен момент удаления MainForm у Application. Я к чему говорю - на свете есть много моментов получения AV, просто у ряда из них частота возникновения невелика...
@!!ex (2006-11-01 17:46:00) [37]Зависнет поток в котором выполняется
(MainForm <> nil) and (MainForm.FormStyle = fsMDIForm)
И за это время выполнится удаление MainForm
Игорь Шевченко (2006-11-01 17:30:00) [38]@!!ex © (01.11.06 17:13) [51]
Который из потоков ? :)
Eraser (2006-11-01 17:20:00) [39]> [44] YuRock © (01.11.06 16:08)
> Блин, а голова программеру на что? Естественно, что пользоваться
> средствами, предоставленными Борландом, Майкрософтом и т.д.
> надо с умом!
за такое"с умом" с работы попереть могут. я бы призадумался о компетенции такого работника.
учти, что даже если тебе полностью понятно, как работает этот код в текущей версии VCL, человек, который возможно в будущем будет заниматься поддержкой/развитием данного кода может быть не в курсе тонкостей.
@!!ex (2006-11-01 17:13:00) [40]
> Игорь Шевченко © (01.11.06 17:06) [50]
Если поток на некоторое время зависинит(ОС не гарантирует что всем потокам выделяется абсолютно одинаковое количество процессорного времени) и за это время форма будет уничтожена.