Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Паралельное выполнение функций.   Найти похожие ветки 

 
Игорь   (2004-03-19 12:24) [0]

Возможно ли в делфи паралельное выполнение функций.
Желательно одной и той же, но с разными параметрами.


 
Игорь   (2004-03-19 12:24) [0]

Возможно ли в делфи паралельное выполнение функций.
Желательно одной и той же, но с разными параметрами.


 
hyper_omsk ©   (2004-03-19 12:29) [1]

Я так понял тебе нужна рекурсия
почитай про нее в faq
к примеру обход каталогов там как раз то что надо


 
hyper_omsk ©   (2004-03-19 12:29) [1]

Я так понял тебе нужна рекурсия
почитай про нее в faq
к примеру обход каталогов там как раз то что надо


 
Digitman ©   (2004-03-19 12:29) [2]

да, возможно

см. тему threads


 
Digitman ©   (2004-03-19 12:29) [2]

да, возможно

см. тему threads


 
Digitman ©   (2004-03-19 12:46) [3]

type

TFunc = function(Params: Variant): Integer;

TMyThread = class(TThread)
private
 FFunc: TFunc;
 FParams: Variant;
protected
 procedure Execute; override;
public
 constructor Create(Func: TFunc; Params: Variant);
end;

constructor TMyThread.Create;
begin
 FFunc := Func;
 FParams := Params;
 inherited Create(false);
end;
begin
end;

procedure TMyThread.Execute;
begin
 Returnvalue := FFunc(FParams);
end;

...

function SomeFunc(Params: Variant): Integer;
begin
 Result := Params[0] + Params[1];
end;

...

var
 Threads: array[0..9] of TMyThread;
 Totalresult: Integer;
..

for i := 0 to 9 do
 Threads[i] := TMyThread.Create(@SomeFunc, VarArrayOf([Random[10], Random[10]]));

Totalresult := 0;
for i := 0 to 9 do
begin
   Inc(Totalresult, Threads[i].WaitFor;
   FreeAndnil(Threads[i]);
end;

ShowMessage(IntToStr(Totalresult));


 
Digitman ©   (2004-03-19 12:46) [3]

type

TFunc = function(Params: Variant): Integer;

TMyThread = class(TThread)
private
 FFunc: TFunc;
 FParams: Variant;
protected
 procedure Execute; override;
public
 constructor Create(Func: TFunc; Params: Variant);
end;

constructor TMyThread.Create;
begin
 FFunc := Func;
 FParams := Params;
 inherited Create(false);
end;
begin
end;

procedure TMyThread.Execute;
begin
 Returnvalue := FFunc(FParams);
end;

...

function SomeFunc(Params: Variant): Integer;
begin
 Result := Params[0] + Params[1];
end;

...

var
 Threads: array[0..9] of TMyThread;
 Totalresult: Integer;
..

for i := 0 to 9 do
 Threads[i] := TMyThread.Create(@SomeFunc, VarArrayOf([Random[10], Random[10]]));

Totalresult := 0;
for i := 0 to 9 do
begin
   Inc(Totalresult, Threads[i].WaitFor;
   FreeAndnil(Threads[i]);
end;

ShowMessage(IntToStr(Totalresult));



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.035 c
3-1081946364
Rule
2004-04-14 16:39
2004.05.09
Read-only+Firebird1.0+ Delphi 7+ Windows


1-1082466872
Ruslan
2004-04-20 17:14
2004.05.09
Вопрос по ListView


14-1082439726
bar
2004-04-20 09:42
2004.05.09
Народ. Правда, что студентов лишат отсрочек от армии?


3-1081396835
Серж
2004-04-08 08:00
2004.05.09
Как округлить число в процедуре Interbase?


3-1081943885
Виктор
2004-04-14 15:58
2004.05.09
Stored Proc





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский