Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ProcessMessages [D6, D7, NT4, WinXP]


Страницы:   1 2 3 4 5

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]

Если поток на некоторое время зависинит(ОС не гарантирует что всем потокам выделяется абсолютно одинаковое количество процессорного времени) и за это время форма будет уничтожена.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо