Dieser Code tut nicht das, was du willst:
Delphi-Quellcode:
for Dummy_Int := Dummy_ItemCount
downto 0
do
begin
Dummy_ItemString := ListBox1.Items[Dummy_Int];
MyJSONArray[Dummy_Int].SyncObj := TCriticalSection.Create;
try
Dummy_ThreadPool.
Default.QueueWorkItem(
procedure
begin
SearchGoogleSingleISBNTask(Dummy_ItemString, MyJSONArray[Dummy_Int], Dummy_Semaphore);
end);
except
on E:
Exception do
showmessage(E.
message);
end;
end;
"Dummy_Int" wird im Thread erst ausgewertet, wenn der Thread ausgeführt wird. Da du aber Dummy_Int (im Hauptthrad) herunterzählst, ist es zu diesem Zeitpunkt evtl. schon 0 oder irgendwas dazwischen.
Dur brauchst sowas:
Delphi-Quellcode:
var X: Integer;
X := 0;
for Dummy_Int := Dummy_ItemCount
downto 0
do
begin
Dummy_ItemString := ListBox1.Items[Dummy_Int];
MyJSONArray[Dummy_Int].SyncObj := TCriticalSection.Create;
try
Dummy_ThreadPool.
Default.QueueWorkItem(
procedure
var
Y: Integer;
begin
// Hier synchronisiert(!) ein Inc(X) machen und ein Y := X;
SearchGoogleSingleISBNTask(Dummy_ItemString, MyJSONArray[Y], Dummy_Semaphore);
// Und hier dann Y statt Dummy_Int
end);
except
on E:
Exception do
showmessage(E.
message);
end;
end;