Hallo David Martens.
Also folgendes.
>> New(InfoRecord);
Ist nur innerhalb des Threadkontext (Threadobjekt) gültig.
Es handelt sich um lokalen Speicher, dies funktioniert
bei deinem Source nur weil Du keinen Thread erzeugst,
Wo ist das Execute???
Für Globalen Memory musst Du zB. GlobalAlloc verwenden, dieser Memory kann dann auch vom MainThread der Applikation
ohne Probleme verwendet werden.
>> PostMessage(fHandle, WM_MY_USER, 1, Integer(InfoRecord));
Ist nur solange in einer multithreaded Umgebung Gültig, solange kein weiteres Event kommt.
ZB. Event wird vom
OS getriggert, thread hat noch Rechenzeit übrig, und es kommt innerhalb dieser noch zu
einem zusätzlichen Event, dann überschreibst Du den vorhergehenden Record, da Du diesen Asynchron
mit PostMessage in die MQ gepostet hast.
Hier musst Du Send Message verwenden.
>> FileZip := TJvZlibMultiple.Create(aOwner);
Hier musst Du berücksichtigen, dass
VCL-Komponenten, die Du im Mainthread erzeugst, nicht Threadsave sind!
Syncronize, bzw. Sperrobjekte verwenden!
>> ObjectList : TObjectList;
Delphi-Quellcode:
for i := 0 to ObjectList.Count - 1 do
begin
TWatchThread(ObjectList.Items[i]).Terminate;
end;
Hier hilft Terminate alleine nicht, da du blockieren auf ein Event wartest, hier musst du nach dem
Terminate, noch das FileNotify -
Handle schließen, sonst terminiert der Thread nicht.
Sieh Dir am besten mal das Thread Demo das mit Delphi mitgeliefert wird an.
lg.