Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать, что TThread отработал 
V
    Опции темы
MadCoder
Дата 12.6.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Здравствуйте!

Моя программа создает некоторое количество потоков (50 и более). Как программа может узнать, что код потоков отработал и можно продолжать другие действия.
PM WWW ICQ   Вверх
Poseidon
Дата 12.6.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Все зависет от того, как у тебя создаются и завершаются потоки. Можно периодично assigned проверять, можно в конце потока передавать "я завершаюсь" в основной (или в "проверяющий") поток. Тут на что фантазии хватит.


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Rrader
  Дата 12.6.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 70
Всего: 191



WaitForMultipleObjects?


--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Alexeis
Дата 12.6.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



MadCoder, у TThread есть функция waitfor т.е. можно поджать завершения, а можно создать семафор, по выходу счетчик автоматом будет уменьшаться.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 12.6.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(Alexeis @  12.6.2008,  16:04 Найти цитируемый пост)
можно создать семафор, по выходу счетчик автоматом будет уменьшаться

сорь, о чем речь? ) по выходу из чего и как это автоматом?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Alexeis
Дата 12.6.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(MetalFan @  12.6.2008,  19:00 Найти цитируемый пост)
сорь, о чем речь? ) по выходу из чего и как это автоматом?


  Перед стартом всех потоков нужно сигнализировать его нужное количество раз, а по выходу из потока занимать. Использовать как счетчик. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MadCoder
Дата 12.6.2008, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Цитата(Alexeis @ 12.6.2008,  20:09)
Цитата(MetalFan @  12.6.2008,  19:00 Найти цитируемый пост)
сорь, о чем речь? ) по выходу из чего и как это автоматом?


  Перед стартом всех потоков нужно сигнализировать его нужное количество раз, а по выходу из потока занимать. Использовать как счетчик.

Т.е. так:
Код

var
A: Integer;
begin
for A:=0 to 50 do
Thread.Create;
while A<>0 do
Application.ProcessMessage;
// После завершения всех потоков делаем что-то дальше
DoSome(Thing);
ShowMessage('Все отработало');
end;


а в процедуре Execute потока писать:
Код

procedure Thread.Execute;
...
// Какие-то действия
DoThomeShing;
Dec(A);
end;


?

Это сообщение отредактировал(а) MadCoder - 12.6.2008, 21:03
PM WWW ICQ   Вверх
MetalFan
Дата 12.6.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Alexeis, ну да, собстно в msdn есть хороший пример по этому поводуь


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
MadCoder
Дата 12.6.2008, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



MetalFan, можешь написать примерчик на Делфи, очень надо, пожаааалуйста smile.
PM WWW ICQ   Вверх
MetalFan
Дата 12.6.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



а что не понятно в примере из msdn?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Exai1e
Дата 12.6.2008, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 908
Регистрация: 3.12.2006
Где: Moscow

Репутация: 2
Всего: 30



MetalFan, мб синтаксис и "неизвестные" операторы ?) ;)


--------------------
"Решение зависит от выбранного геморроя" © Snowy
"у нас как в армии - либо работает, либо так и задумано"
PM MAIL ICQ   Вверх
Rennigth
Дата 15.6.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



хм, забыли про OnTerminated smile  Если конечно потоки на основе TThread  smile 


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
MadCoder
Дата 20.6.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Цитата(Rennigth @ 15.6.2008,  00:42)
хм, забыли про OnTerminated smile  Если конечно потоки на основе TThread  smile

Точно! Значит поток Terminate, в функции OnTerminated уменьшаем счетчик и в главном коде ставим:

Код

while counter<>0 do application.processmessages


Все ясно! Спасибо smile.

Это сообщение отредактировал(а) MadCoder - 20.6.2008, 14:21
PM WWW ICQ   Вверх
CodeMonkey
Дата 26.6.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 38
Всего: 89



P.S.
Цитата(MadCoder @  20.6.2008,  14:18 Найти цитируемый пост)
Код
while counter<>0 do application.processmessages

Вообще-то это не даст выполняться Synchronize и вообще цикл будет постоянно крутиться (хотя, возможно что в вашей ситуации это не важно). Я бы использовал HandleMessage и после уменьшения счётчика пробуждал бы главный поток отправкой WM_NULL. 


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
MadCoder
Дата 3.7.2008, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 478
Регистрация: 24.8.2007
Где: Москва

Репутация: 1
Всего: 2



Код

var
A: Integer;
Thread: TThread;
Handles: array of cardinal;
begin
SetLength(Handles, 1000);
for A:=0 to 999 do
with Thread.Create(False) do
Handles[A]:=Handle;
if waitformultipleobjects ( Length(Handles), @Handles, true, infinite) = 1 then
ShowMessage('Потоки отработали');


Так?
PM WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0602 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.