Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Внизfindcomponent в потоке Найти похожие ветки
← →
bagos (2008-04-08 10:48) [0]хотел процедуру вынести в поток, но столкнулся с проблемой. в процедуре есть строчки findcomponent и будучи в потоке компилятор ругается, контролы ищуться на form1.
как решить проблему? заранее спасибо за ответы!
← →
Сергей М. © (2008-04-08 10:52) [1]
> компилятор ругается
Матерно ?)
Здесь даже процитировать его стыдно ?)
← →
Palladin © (2008-04-08 10:55) [2]
> Сергей М. © (08.04.08 10:52) [1]
аффтар видимо считает что FindComponent - это вовсе не метод TComponent, а какая нибудь функция из System или SysUtils :)
← →
Kolan © (2008-04-08 10:56) [3]> Матерно ?)
Наверняка. :)
Автор, не трогай VCL из доп потоков.
← →
ЮЮ © (2008-04-08 10:56) [4]> процедуре есть строчки findcomponent
А должны быть не строчки, а методы определенных классов.
З.Ы. Сколько же ты компонентов на форму накидал, что доп.поток потребовался, чтобы что-то нужнок найти? :)
← →
Игорь Шевченко © (2008-04-08 11:09) [5]
> Автор, не трогай VCL из доп потоков.
Аргументы будут ?
Развелось wannabee - куда ни плюнь, всяко попадешь, да еще и не один раз.
← →
Kolan © (2008-04-08 11:30) [6]> Аргументы будут ?
Будут. Большинство из них не потоко безопасные, о чем ты прекрасно знаешь.
> Развелось wannabee — куда ни плюнь, всяко попадешь, да еще
> и не один раз.
Игорь, пожалуйста, не переходи на личности. А то я тебя пошлю, а ты меня забанишь, а это будет не честно. Я, если ты не заметил, такого себе не позволяю. И общаюсь только по поводу сабжа ветки (любой). В отличае от некоторых.
← →
Игорь Шевченко © (2008-04-08 11:33) [7]Kolan © (08.04.08 11:30) [6]
> Будут. Большинство из них не потоко безопасные, о чем ты
> прекрасно знаешь.
В том числе и findcomponent ?
← →
Kolan © (2008-04-08 11:35) [8]> В том числе и findcomponent ?
В том числе, то, что будет делаться с найденым с помощьюfindcomponent
компонентом (а скорее всего контролом).
← →
Kolan © (2008-04-08 11:38) [9]Этот совет из серии делить на 0 нельзя. Да, в старших классах рассказываю, что оказывается можно, но только рассказывать это пятиклашкам незачем. Поэтому и придумали ограничение «делить на 0 нельзя», чтоб новичков оградить от ошибок.
Так и я говорю, что «не надо трогать VCL из доп потоков» если у тебя контролы лежать на form1 и ты незнаешь что findcomponent метод…
← →
bagos (2008-04-08 11:38) [10]спасибо всем за ответы, пусть и не все по теме
> аффтар видимо считает что FindComponent - это вовсе не метод
> TComponent
;)
я так вовсе не считаю, я написал что данную процедуру мне нужно вытащить в поток, и плевать где будет findcomponent, мне нужно сохранить функционал процедуры при вынесении в поток. собственно я сюда и написал чтобы мне посоветовали как это лучше сделать, о том какие траблы при работе с контролами в потоках - знаю.
конференция для "Начинающих", так что не ругайтесь на меня ;)
← →
Kolan © (2008-04-08 11:42) [11]Правлиьно, имхо, рассказать зачем тебе findcomponent в потоке и мы тебя, скорее всего отговорим от этой странной затеи.
← →
DVM © (2008-04-08 11:42) [12]FindComponent работает со списком FComponents: TList; класса TComponent. Так что если в основном потоке что-то будет создаваться/удаляться в рунтайм, то есть отличная от нуля вероятность, что из доп. потока мы нарвемся все же.
← →
Palladin © (2008-04-08 11:46) [13]в вопросе я вижу, что ты получил какое то сообщение об ошибки компиляции и спросил как решить эту проблему. тут вдруг оказывается что ты совета спрашивал как все это лучше сделать...
так вот: лучше, а так же правильней, это сделать в основном потоке без всяких дополнительных.
findcomponent отнюдь не потокобезопасный, никто не будет блокировать объект-контейнер от освобождения и посылки на деревню к дедушке, пока будет крутиться цикл поиска компонента в доп.потоке., а вслучае если контейнер визуальный то это вообще труба. соответственно пользоваться придется synchronize. а на кой тогда вообще поток для findcomponent?
ты бы, аффтар, описал бы задачу по подробей, может там в потоке еще чего то делается по мимо findcomponent
← →
bagos (2008-04-08 11:53) [14]ОК, сама процедура скачивает данные с интернета, в зависимости от заданных начальных параметров время получения информации занимает иногда неприятные пару минут, прога разумеется виснет :) поток бы вывел процедуру из этой "задницы" ;)
← →
DVM © (2008-04-08 11:54) [15]
> bagos (08.04.08 11:53) [14]
Ну и пускай она скачивает. FindComponent то там зачем нужен?
← →
bagos (2008-04-08 11:57) [16]капризы заказчика ;) на самом деле, в рантайме пользователь выбирает куда заносить и откуда куда данные)
← →
Kolan © (2008-04-08 11:58) [17]> капризы заказчика ;)
Неправда.
← →
DVM © (2008-04-08 11:59) [18]
> bagos (08.04.08 11:57) [16]
Так и не объяснил, зачем в потоке, который принимает данные нужен FindComponent
← →
bagos (2008-04-08 11:59) [19]
> Неправда.
по моему шутка очевидна...
← →
Palladin © (2008-04-08 12:02) [20]
> bagos (08.04.08 11:53) [14]
ептыть, совсем другое дело... т.е. ты поток создаешь для определенной задачи, задача, отдельно, не загружая основной поток, получить информацию откуда то из вне. замечательно. так вот и оставим этому потоку его задачу, пусть он загрузит там откуда-то чего-то, и сохранит в объекте потока эту загруженную информацию и или уведомит основной поток об окончании работы, либо основной поток будет переодически его опрашивать на предмет окончания работы. тут уж тебе решать кто кому чего говорить будет. это от многих факторов зависит...
← →
bagos (2008-04-08 12:06) [21]вопа,спасибо Palladin, всем спасибо!!!)) что то и вправду не в ту степь меня понесло))))
надо меньше ночью сидеть за компом...)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.006 c