![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запустить TThread повторно?
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]а евент это конечно очень дешевый для процесса объект