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

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

Потоки [D7, Win95/98]


BVV ©   (2005-02-23 15:39:00) 

Помогите справиться с потоками, требуется создать одновременно четыре независимых потока p1,p2,p3,p4,  каждый и которых получает по два разных массива чисел, для p1-М1 и N1, p2-M2 и N2, p3-M3 и N3, p4-M4 и N4  (для разных потоков набор чисел в массивах разный), осуществляет построковое перемножение чиссел массивов и выводит результат в мемо1, memo2, memo3, memo4. Причем работа потоков не должна ни как влиять друг на друга.


begin...end   (2005-02-23 17:21:00) [1]

> BVV   (23.02.05 15:39)

См. также: {Delphi}\Demos\Threads.


Юрий Зотов   (2005-02-23 16:08:00) [2]

Еще уточнение:
TArray = packedarray of тип_числа;
Хотя говорят, что на практике это одно и то же.


Юрий Зотов   (2005-02-23 15:58:00) [3]

Уточнение: конечно же, вместо
 Move(M[0], FM[0], Length(M));
нужно писать
 Move(M[0], FM[0], Length(M) * SizeOf(тип_числа));

И то же самое для N.


Юрий Зотов   (2005-02-23 15:55:00) [4]

type
 TArray = array of тип_числа;
 TMyThread = class of TThread;
 private
   FM: TArray;
   FN: TArray;
   FMemo: TMemo;
   procedure ShowResults;
 protected
   procedure Execute; override;
 public
   constructor Create(M, N: TArray; Memo: TMemo);
   destructor Destroy; override;
 end;

constructor TMyThread.Create(M, N: TArray; Memo: TMemo);
begin
 inherited Create(True);
 SetLength(FM, Length(M));
 Move(M[0], FM[0], Length(M));
 SetLength(FN, Length(N));
 Move(N[0], FN[0], Length(N));
 FMemo := Memo;
 FreeOnTerminate := True;
 Resume
end;

destructor TMyThread.Destroy;
begin
 FN := nil;
 FM := nil;
 inherited
end;

procedure TMyThread.Execute;
begin
 ... // Обработка массивов FM и FN
 Synchronize(ShowResults)
end;

procedure TMyThread.ShowResults;
begin
 ... // Вывод результатов в FMemo
end;

И все. Теперь вызываете конструктор хоть 4, хоть 104 раза, а в его параметрах указываете массивы-источники данных и Memo-приемник результатов.


Александр Иванов   (2005-02-23 15:52:00) [5]

Здесь задают вопросы, в чем твой вопрос?


Наверх

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