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