|
Threads unter Delphi 8
Frage: Bei mir funktioniert die Thread-Klasse aus dem .NET-Framework unter Delphi 8 nicht, obwohl ich nur ein Beispiel nachbaue, dass in C# problemlos funktioniert. Beim Kompilieren erhalte ich nur das Veto "Objekt oder Klassentyp erforderlich", wenn ich die Instanz der ThreadStart-Klasse erzeugen will. Kann mir hier jemand weiterhelfen?
Antwort: Die CLR (Command Language Runtime) stellt zwei Verfahren bereit, um Operationen parallel abarbeiten zu lassen:
1. Abspalten eines neuen Threads
2. Asynchroner Aufruf
Während der 2. Weg aufgrund der internen Beschränkungen erst ab Delphi 9 uneingeschränkt verfügbar ist (hat Borland jedenfalls versprochen), funktioniert der 1. Weg prinzipiell auch in Delphi 8. Im Detail gibt es aber auch da Unterschiede zu C# und VB.NET, so dass der Aufruf in Delphi 8 im Vergleich zu einem C#-Beispiel anders aussieht. Das folgende Beispiel für eine Consolen-Anwendung verdeutlicht dies:
program Project2;
{ CONSOLE}
uses
SysUtils, System.Threading;
type
TThreadWorkClass = class
procedure DoThreadWork;
end;
{ TThreadWorkClass }
procedure TThreadWorkClass.DoThreadWork;
begin
WriteLn('DoThreadWork beginnt...');
Thread.Sleep(1000);
WriteLn('.... DoThreadWork endet.');
ReadLn;
end;
var
aTWC : TThreadWorkClass;
aThread: Thread;
begin
aTWC := TThreadWorkClass.Create;
aThread := Thread.Create(aTWC.DoThreadWork);
aThread.Name := 'Mein eigener Thread';
WriteLn('Vor dem Aufruf von Thread.Start');
aThread.Start;
WriteLn('Nach dem Aufruf von Thread.Start');
end.
Der unter C# und VB.NET übliche "bequeme" (weil universell nutzbare) Weg über die ThreadStart-Klasse aus dem .NET-Framework steht unter Delphi 8 nicht zur Verfügung, statt dessen müssen wir selbst die im Thread auszuführende Methode in eine eigene Hilfsklasse verpacken.
|