Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#3

AW: ComObj und Thread

  Alt 22. Mai 2014, 08:49
Das ist aber bekannt und aus dem Grund ruft man in einem Thread, der solche ComObj benutzt immer CoInitialize und CoUninitialize auf.

Prominentes Beispiel dafür sind die ADO-Komponenten.

Delphi-Quellcode:
procedure TMyThread.Execute;
begin
  inherited;
  CoInitialize( nil );
  try
    DoExecute;
  finally
    CoUninitialize;
  end;
end;

procedure TMyThread.DoExecute;
begin
  while not Terminated do
  begin
    ...
  end;
end;

Also doch..
Die Frage ist nur wo sollte man die Initialisierung aufrufen bzw Uninitialisieren.
Jedesmal wenn ich ein neues ComObj erstelle und wieder freigebe ?
Ein TMyThread.Execute gibt es ja bei mir nicht da ich den Thread mit Win32 mitteln erstelle siehe

Delphi-Quellcode:
WMPThreadHandle := BeginThread(nil, 0, @BassWMPVisThread, pointer(PresetIndex),
  0, WMP_RenderThreadId);
Mein RenderThread basiert auf TThread dieser hat aber nichts mit dem Hauptthread gemein.
Es sollte aber kein Problem diesbezüglich entstehen denn aus diesen Thread sende ich alle Messagen über Events.
Sample..
PostThreadMessage(DriveThreadId, FDataReadyMsg, DataReady, 0);
gruss

Geändert von EWeiss (22. Mai 2014 um 08:55 Uhr)
  Mit Zitat antworten Zitat