Vornweg: Hierfür sind die
Generics notwendig.
Also, nix Weltbewegendes .. hiermit kann man halt einfach nur verschiedene Prozeduren in eigenen Threads laufen lassen.
Diese Prozeduren können, unter Anderem Dank der Generics, auch mit eigenen Parameterdefinitionen versehen sein.
Bis zu 3 Parameter sind möglich.
Delphi-Quellcode:
Program ThreadHelperP;
Uses Windows, ThreadHelper;
Procedure Proc(Helper: TThreadHelperClass; Const i: Integer);
Begin
Beep(1000, 500);
Sleep(i);
Beep(1000, 500);
End;
Procedure Proc2(Helper: TThreadHelperClass);
Begin
While Helper.Running do Begin
Beep(5000, 200);
Sleep(1000);
End;
End;
Begin
RunAsThread<Integer>(Proc, 3000);
TThreadHelper.RunAsThread(Proc2);
Sleep(10000);
TThreadHelper.StopAllGlobalThreads;
// warten bis alle Threads beendet wurden
While TThreadHelper.ActiveGlobalThreads > 0 do Sleep(10);
End.
Leider gibt es keine Generics für Prozeduren
, drum mußte ich alles in 'ner Klasse (TThreadHelper) kapseln.
Geplant waren eigentlich nur die RunAsThread-Prozeduren, aber am Ende hatte es so wohl doch einige Vorteile.
Innerhalb der Threads kann man, ebenso wie bei den Thread-Prozeduren,
auch entsprechende Synchronize-Prozeduren aufrufen.
Es ist also nicht nötig sich erst eine eigene TThread-Klasse abzuleiten
oder sich mit der
WinAPI auseinander zu setzen,
sondern kann seine Prozedur einfach und direkt starten
und das sogar mit Parametern, was doch sonst immer ein bissl schwieriger ist.
[edit]
In der 7zip liegt nun das Testprogramm, die Generics-Version und eine neue abgespreckte Version ohne Generics.