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

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

Запустить TThread повторно?


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

Cobalt ©   (2009-02-21 15:14:00) 

Есть у меня один поток, который обходит каталоги, считает контрольные суммы файлов.
Но каждый раз после окончания работы приходится пересоздавать объект :-(

Вопрос такой: можно ли после окончания исполнения потока повторно использовать объект TThread ?

Например, запустив его метод Create - будет ли создан новый объект TThread, который повиснет в памяти, или он только отработает свой код, заново запустив WinAPI-ый поток исполняться?


Медвежонок Пятачок   (2009-02-22 00:51:00) [61]

Давай конкретнее? Не будем просто так языком чесать?

Давай.
Уточним, в чем суть спора.
создать один экземпляр нитки и иметь возможность запустить ее много раз повторно без пересоздания, но только тогда, кода она закончила всю прикладную работу с предыдущего вызова?

Верно? Я ничего не упустил?


Германн   (2009-02-22 00:45:00) [62]


> Тын-Дын ©   (22.02.09 00:36) [27]


> Медвежонок Пятачок ©   (22.02.09 00:36) [28]

Классный спор!
Один доказывает, что Фома прав, поскольку он не забыл надеть шляпу, а другой доказывает, что Фома не прав, поскольку в отличие от Ерёмы у Фомы ноги кривые. :)
И ни один, ни другой не приводят в доказательство никаких фактов.
Хотя чету тут удивляться? Достаточно взглянуть на ники! :)

P.S. "Про ники" надеюсь без обид?
Попробуйте сами взглянуть на это со стороны.


Тын-Дын   (2009-02-22 00:40:00) [63]


> они могут понадобиться только от полного непонимания элементарный
> вещей.


Давай конкретнее? Не будем просто так языком чесать?


Медвежонок Пятачок   (2009-02-22 00:36:00) [64]

евенты здесь нафик не нужны.

они могут понадобиться только от полного непонимания элементарный вещей.


Тын-Дын   (2009-02-22 00:36:00) [65]


> Медвежонок Пятачок ©


Если интересно понять, почему именно так, а не по другому - задай конкретные вопросы - по каждой строке кода отвечу.


Тын-Дын   (2009-02-22 00:35:00) [66]


> Медвежонок Пятачок ©   (22.02.09 00:30) [23]
> Тем более без практической и теоретической подготовки?ты
> у меня экзамены что ли принимал?


По твоему высказыванию видно -

> За какой надобностью здесь потребовалось использовать евенты?


Особенно вот это показывает полное непонимание предметной области-


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


Медвежонок Пятачок   (2009-02-22 00:33:00) [67]

Нет у потока свойства, которое бы показывало, работает он или нет (даже если Suspended)

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


Тын-Дын   (2009-02-22 00:33:00) [68]


> Нет у потока свойства, которое бы показывало, работает он
> или нет (даже если Suspended)


А что в твоём понимании "работает"?

Поток может находиться только в двух состояниях - спит и не спит.

Поточная функция может ожидать неких событий. В этом случае поток работает или нет?


Медвежонок Пятачок   (2009-02-22 00:30:00) [69]

Тем более без практической и теоретической подготовки?

ты у меня экзамены что ли принимал?


Cobalt   (2009-02-22 00:16:00) [70]

Мой вопрос был большей частью по эстетической линии:
Нет у потока свойства, которое бы показывало, работает он или нет (даже если Suspended)

Суть вопроса:
Есть несколько задач по обходу каталогов.
Сначала я сделал их в основном потоке, выводя в мемо результат обхода (с ProcessMessages для отображения пользователю).
Но при этом нажать на кнопку "Остановить процесс" затруднительно.
Вынес работу в отдельный поток, чтобы кнопки были доступны пользователю.

При этом надо обновлять состояние прочих кнопок в соответствии с состоянием работы.
Проще всего - по свойству потока - работает он или уже/еще нет.
К примеру, в Action.OnExecute дернул FThread.Start, а на Action.OnUpdate
actStop.Enabled:=FThread.Running;

а вместо этого приходится делать дополнительные свойства, вручную взводить в Thread.Execute и сбрасывать после:

actStop.Enabled:=(FThread<>nil)and(FThread.InProgress);


Тын-Дын   (2009-02-21 22:54:00) [71]


> Медвежонок Пятачок ©   (21.02.09 21:05) [9]
> в чем-то ты прав. я не пытался ответить на них (вопросы)
> потому что таких вопросов у меня не возникало никогда


Ну не пытался, тогда стоит ли начинать пытаться? Тем более без практической и теоретической подготовки?


Тын-Дын   (2009-02-21 22:53:00) [72]


> Медвежонок Пятачок ©   (21.02.09 21:10) [10]
>За какой надобностью здесь потребовалось
> использовать евенты?


Тебе интересно, или тебе подумать лень?

Конечно же, проще переться от собственной крутости, бросаясть фразами навроде [7].

Подумаешь - ответишь для себя.
Думать не хочешь - твоё дело.


Riply   (2009-02-21 22:15:00) [73]

> [18] Медвежонок Пятачок ©   (21.02.09 22:12)
> да я вообще пушистый.

Если еще и белый, то тогда ладно :)


Медвежонок Пятачок   (2009-02-21 22:12:00) [74]

да я вообще пушистый.


Riply   (2009-02-21 22:09:00) [75]

>  [16] Медвежонок Пятачок ©   (21.02.09 22:06)

Ты чего это такой агрессивный ? :)
Мы просто мирно обсуждали "тяжесть" создания нити,
а отнюдь не качество твоего кода :)


Медвежонок Пятачок   (2009-02-21 22:06:00) [76]

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


Riply   (2009-02-21 22:03:00) [77]

> [14] Медвежонок Пятачок ©   (21.02.09 21:54)

Очень сильно зависит от интенсивности создания.
Предполагаю, что при "наплыве" клиентов - это может стать заметным.
P.S.
Ну и не зря же ThreadPool придумали :)


Медвежонок Пятачок   (2009-02-21 21:54:00) [78]

сомневаюсь что меня это впечатлит.
я в основном занимаюсь проектированием систем 24х7.
пришел клиент - создается нить.
новая.
и никто еще пока не жаловался, что медленно обслуживается именно из за того, что нити пересоздаются.


Riply   (2009-02-21 21:51:00) [79]

> [12] Медвежонок Пятачок ©   (21.02.09 21:24)
> а евент это конечно очень дешевый для процесса объект

Честно говоря - не знаю степень его (Eventa) "тяжести" :)
Но с нитями неоднократно ставила различные опыты.
Например, были очень старые исходники Rouse`а - перебор открытых файлов.
Там он на каждый запрос создавал нить ( сканирование занимало ~ 30-40 сек )
Я попробовала не уничтожать нить (если нет необходимости, а повторно использовать).
Сканирование стало занимать доли секунды. Разница на порядки :)
Числа по памяти - могу ошибаться (давно это было), но то что разница измерялась порядками - "эт точто" :)
Да ты и сам можешь проверить, написав простой пример:
(пересоздание нити на каждый запрос и обращение к уже существующей ).
Результат тебя впечатлит :)


Медвежонок Пятачок   (2009-02-21 21:24:00) [80]

а евент это конечно очень дешевый для процесса объект


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

Наверх

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