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

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

Работа с несколькими потоками [D2005, XP]


Std ©   (2006-04-18 16:15:00) 

По нажатию кнопки на форме запускается несколького потоков которые выполняют определенные действия. как узнать когда все потоки закончили работать? нада что бы нажал я на кнопку потоки начали выполнять свои действия, а как выполнили то выскочило окошко с надписью типа: "Потоки зделали свое дело. Потоки могут быть свободны"


Std   (2006-04-19 16:41:00) [1]

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


Сергей М.   (2006-04-19 13:18:00) [2]


> Std ©   (19.04.06 13:07) [7]


Ну а вообще говоря городить огород с "делением" стринглиста на кучу стринглистов вряд ли есть повод.


MBo   (2006-04-19 13:13:00) [3]

ПроцентДляВсехПотоков = 100 * СуммаСделанногоВсемиПотоками / РазмерДанныхВсехПотоков


Сергей М.   (2006-04-19 13:13:00) [4]


> как зделать процент для всех потоков


Вася и Петя поделили яблоко пополам.

Вася съел 50% своей доли, а Петя 30% своей.

Сколько процентов целогояблока съели Вася с Петей ?

Ответ очевиден - (50% + 30%) / 2 = 40%

Откуда взялась "двойка" - догадайся сам)


Std   (2006-04-19 13:07:00) [5]

ага, учебная


MBo   (2006-04-18 17:46:00) [6]

Это учебная задача?


Std   (2006-04-18 17:38:00) [7]

за OnTerminate спасибо, но теперь возникла другая необходимость.
у меня существует один StringList он делится на 5 StringList sl1,sl2,sl3,sl4,sl5
соответствеено создается 5 потоков которые обрабатывают эти списки. так вот вопрос: как мне пощитать процент выполения обработки строк всех 5 списков.
для каждого отдельного потока я делал вот так:

for i:=0 to sl.Count-1 do
 begin
   ........
   q:=((i+1)*100)div lt.Count;
 end;

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


Сергей М.   (2006-04-18 16:51:00) [8]


> ooops   (18.04.06 16:32) [2]


На то существует событие TThread.OnTerminate


Мефисто   (2006-04-18 16:34:00) [9]

ooops    (18.04.06 16:32) [2]

Что это было? Уверены?


ooops   (2006-04-18 16:32:00) [10]

var
Swith : Integer;

procedure Form1.ThreadCreate;
begin
Swith := 0;
создание потока 1
 Inc(Swith);
создание потока 2
 Inc(Swith);
end;

procedure TForm1.EndThread;
begin
if Swith = 0 then сообщение
else Dec(Swith);
end;

procedure Thread.Execute;
begin
Synhronize(Form1.EndThread);
end;


MBo   (2006-04-18 16:20:00) [11]

создать обработчик события при завершении потока OnTerminate


Наверх

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