Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Verständnisproblem / Threadproblem ?

  Alt 20. Dez 2005, 09:55
CoInitialize und CoUnInitialize müssen im Kontext des Threads aufgerufen werden.
Also sind der Konstruktor und Destruktor tabu, da diese im Kontext des Hauptthreads aufgerufen werden.
Deshalb muss das innerhalb von [TThread].Execute stattfinden:
Delphi-Quellcode:
procedure TCOMThread.Execute;
begin
   CoInitialize(nil);
   try
      // hier findet die eigentliche Arbeit statt

   finally
      CoUninitialize;
   end;
end;
Jetzt muss man aber noch etwas aufpassen!!
Wenn ein Interface-Pointer noch "lebt", nachdem CoUninitialize aufgerufen wurde, dann liegt ein Fehler vor.
Deshalb wird die "eigentliche Arbeit" ausgelagert:
Delphi-Quellcode:
procedure TCOMThread.InnerExecute;
var
   a,b, c : IUnknown;
begin
   // hier findet die eigentliche Arbeit statt
end;

procedure TApartmentThread.Execute;
begin
   CoInitialize(nil);
   try
      InnerExecute;
   finally
      CoUninitialize;
   end;
end;
Andreas
  Mit Zitat antworten Zitat