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

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

findcomponent в потоке


Страницы:   1 2

bagos ©   (2008-04-08 10:48:00) 

хотел процедуру вынести в поток, но столкнулся с проблемой. в процедуре есть строчки findcomponent и будучи в потоке компилятор ругается, контролы ищуться на form1.
как решить проблему? заранее спасибо за ответы!


bagos   (2008-04-08 12:06:00) [1]

вопа,спасибо Palladin, всем спасибо!!!)) что то и вправду не в ту степь меня понесло))))
надо меньше ночью сидеть за компом...)


Palladin   (2008-04-08 12:02:00) [2]


> bagos   (08.04.08 11:53) [14]

ептыть, совсем другое дело... т.е. ты поток создаешь для определенной задачи, задача, отдельно, не загружая основной поток, получить информацию откуда то из вне. замечательно. так вот и оставим этому потоку его задачу, пусть он загрузит там откуда-то чего-то, и сохранит в объекте потока эту загруженную информацию и или уведомит основной поток об окончании работы, либо основной поток будет переодически его опрашивать на предмет окончания работы. тут уж тебе решать кто кому чего говорить будет. это от многих факторов зависит...


bagos   (2008-04-08 11:59:00) [3]


> Неправда.

по моему шутка очевидна...


DVM   (2008-04-08 11:59:00) [4]


> bagos   (08.04.08 11:57) [16]

Так и не объяснил, зачем в потоке, который принимает данные нужен FindComponent


Kolan   (2008-04-08 11:58:00) [5]

> капризы заказчика ;)

Неправда.


bagos   (2008-04-08 11:57:00) [6]

капризы заказчика ;) на самом деле, в рантайме пользователь выбирает куда заносить и откуда куда данные)


DVM   (2008-04-08 11:54:00) [7]


> bagos   (08.04.08 11:53) [14]

Ну и пускай она скачивает. FindComponent то там зачем нужен?


bagos   (2008-04-08 11:53:00) [8]

ОК, сама процедура скачивает данные с интернета, в зависимости от заданных начальных параметров время получения информации занимает иногда неприятные пару минут, прога разумеется виснет :) поток бы вывел процедуру из этой "задницы" ;)


Palladin   (2008-04-08 11:46:00) [9]

в вопросе я вижу, что ты получил какое то сообщение об ошибки компиляции и спросил как решить эту проблему. тут вдруг оказывается что ты совета спрашивал как все это лучше сделать...

так вот: лучше, а так же правильней, это сделать в основном потоке без всяких дополнительных.

findcomponent отнюдь не потокобезопасный, никто не будет блокировать объект-контейнер от освобождения и посылки на деревню к дедушке, пока будет крутиться цикл поиска компонента в доп.потоке., а вслучае если контейнер визуальный то это вообще труба. соответственно пользоваться придется synchronize. а на кой тогда вообще поток для findcomponent?

ты бы, аффтар, описал бы задачу по подробей, может там в потоке еще чего то делается по мимо findcomponent


Kolan   (2008-04-08 11:42:00) [10]

Правлиьно, имхо, рассказать зачем тебе findcomponent в потоке и мы тебя, скорее всего отговорим от этой странной затеи.


DVM   (2008-04-08 11:42:00) [11]

FindComponent работает со списком FComponents: TList; класса TComponent. Так что если в основном потоке что-то будет создаваться/удаляться в рунтайм, то есть отличная от нуля вероятность, что из доп. потока мы нарвемся все же.


bagos   (2008-04-08 11:38:00) [12]

спасибо всем за ответы, пусть и не все по теме
> аффтар видимо считает что FindComponent - это вовсе не метод
> TComponent

;)
я так вовсе не считаю, я написал что данную процедуру мне нужно вытащить в поток, и плевать где будет findcomponent, мне нужно сохранить функционал процедуры при вынесении в поток. собственно я сюда и написал чтобы мне посоветовали как это лучше сделать, о том какие траблы при работе с контролами в потоках - знаю.
конференция для "Начинающих", так что не ругайтесь на меня ;)


Kolan   (2008-04-08 11:38:00) [13]

Этот совет из серии делить на 0 нельзя. Да, в старших классах рассказываю, что оказывается можно, но только рассказывать это пятиклашкам незачем. Поэтому и придумали ограничение «делить на 0 нельзя», чтоб новичков оградить от ошибок.

Так и я говорю, что «не надо трогать VCL из доп потоков» если у тебя контролы лежать на form1 и ты незнаешь что findcomponent метод…


Kolan   (2008-04-08 11:35:00) [14]

> В том числе и findcomponent ?

В том числе, то, что будет делаться с найденым с помощью findcomponentкомпонентом (а скорее всего контролом).


Игорь Шевченко   (2008-04-08 11:33:00) [15]

Kolan ©   (08.04.08 11:30) [6]


> Будут. Большинство из них не потоко безопасные, о чем ты
> прекрасно знаешь.


В том числе и findcomponent ?


Kolan   (2008-04-08 11:30:00) [16]

> Аргументы будут ?

Будут. Большинство из них не потоко безопасные, о чем ты прекрасно знаешь.

> Развелось wannabee — куда ни плюнь, всяко попадешь, да еще
> и не один раз.

Игорь, пожалуйста, не переходи на личности. А то я тебя пошлю, а ты меня забанишь, а это будет не честно. Я, если ты не заметил, такого себе не позволяю. И общаюсь только по поводу сабжа ветки (любой). В отличае от некоторых.


Игорь Шевченко   (2008-04-08 11:09:00) [17]


> Автор, не трогай VCL из доп потоков.


Аргументы будут ?

Развелось wannabee - куда ни плюнь, всяко попадешь, да еще и не один раз.


ЮЮ   (2008-04-08 10:56:00) [18]

> процедуре есть строчки findcomponent

А должны быть не строчки, а методы определенных классов.

З.Ы. Сколько же ты компонентов на форму накидал, что доп.поток потребовался, чтобы что-то нужнок найти? :)


Kolan   (2008-04-08 10:56:00) [19]

> Матерно ?)

Наверняка. :)
Автор, не трогай VCL из доп потоков.


Palladin   (2008-04-08 10:55:00) [20]


> Сергей М. ©   (08.04.08 10:52) [1]

аффтар видимо считает что FindComponent - это вовсе не метод TComponent, а какая нибудь функция из System или SysUtils :)


Страницы:   1 2

Наверх

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