Die erste Lösung klingt doch schon mal gut. Besten Dank.
Sollte das dann so aussehen?
QueueUserWorkItem(@Thread, ThreadParams, WT_EXECUTELONGFUNCTION or 2 * $10000)
Weil das funktioniert irgendwie nicht:
Delphi-Quellcode:
function Thread(p: Pointer): Integer; stdcall;
var
LBIndex : Cardinal;
Cnt : Cardinal;
begin
LBIndex := PThreadParams(p)^.LBIndex;
for cnt := 0 to 99 do
begin
TListbox(Form1.FindComponent('Listbox' + IntToStr(LBIndex))).Items.Add(IntToStr(cnt));
sleep(50);
end;
result := 0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
ThreadParams : PThreadParams;
i : Integer;
begin
New(ThreadParams);
for i := 1 to 6 do
begin
sleep(10);
ThreadParams.LBIndex := i;
if QueueUserWorkItem(@Thread, ThreadParams, WT_EXECUTELONGFUNCTION or 2 * $10000) = 0 then
ShowMessage(SysErrorMessage(GetLastError));
end;
end;
Es werden doch alle sech Listboxen gleichzeitig ausgefüllt. Und ohne das Sleep(10) kommt er sogar durcheinander und füllt die letzte mehrmals aus.