Da ich wirklich nicht alle posten kann, wäre einfach zu lang, habe ich mal die wichtigen sachen zusammen gestellt. Wenn ich was vergessen habe, dann beschimpft einfach
Delphi-Quellcode:
type
TReadDataFrm = class(TForm)
RzPanel1: TRzPanel;
StatusBox: TRzGroupBox;
[SNIP]
private
{ Private-Deklarationen }
procedure RefreshRDObj(var Msg: TMessage); message Refresh_RDObj;
public
{ Public-Deklarationen }
end;
procedure TReadDataFrm.RefreshRDObj(var Msg: TMessage);
var
i :Integer;
begin
i := Integer(Msg.lParam);
[SNIP]
MyThread.InUse:=False;
end; {RefreshRDObj(var Msg: TMessage)}
Das hier ist dann im Thread der eigentliche aufruf. Er achtet noch auf InUse da es vorher ja mit Postmessage gemacht wurde.
Delphi-Quellcode:
if AppRun=1 then begin
AppRun:=0;
if NOT MyThread.InUse then begin
MyThread.i:=2;
MyThread.InUse:=True;
SendMessage(MyThread.WinHandle, Refresh_RDObj, 0, MyThread.i);
end;
end;
Apprun ist auch Global. Es wird alle 100ms auf 1 gesetzt, über einen normalen TTimer. Da grade dieses nicht mehrmals aufgerufen wird, ist das kein record-array.
Das teil sieht so aus.
Delphi-Quellcode:
type
TMyThread = record
InUse :Boolean;
RunType :Integer;
PathCount :Integer;
FileCount :Integer;
SizeCount :Int64;
FileName :String;
WinHandle :THandle;
[SNIP]
AktDirVar :String;
AktProgress :Integer;
i :Integer;
Str :String;
end;
Winhandle wird vor dem start des Thread gesetzt. Wie gesagt, das ist kein "eigener" Thread wie ich ihn im ersten post hier beschrieben habe, sondern ein TJvMTThread. Damit habe ich noch nie was gemacht. Alle meine progs liefen immer mit Thread wie im 1. post beschrieben. Vielleicht vergesse ich da was?!?
So, nun hab ich sooo lange gesucht und Copy&Pastet das ne Rote Box kam...
[Nachtrag]
Mit der Variante aus dem ersten post, habe ich ein prg gemacht was bis zu 200 threads zeitgleich laufen hat. Das klappt einwandfrei. Eventuell sollte ich vom TJvMTThread wieder weggehen und es so machen wie ich es gewohnt bin.