Sonntag, 7. September 2008

entwickler.com Magazine Konferenzen Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

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.






Software & Support Verlag GmbH