Witam,
W moim programie zacząłem używać tasków. Niestety okazało się że czasem niektóre taski nie są wykonywane. Poniżej fragmenty kodu. Nie wiem czy ja robię gdzieś błąd, czy to wina kompilatora (Delphi 10.3 Community Edition). Dodam, iż bez jakiejkolwiek zmiany kodu, po kolejnej kompilacji okazuje się że inne taski nie zostały wykonane, bywają też kompilacje, gdzie wszystkie taski zostaną wykonane.
var task:array of ITask;
B1,B2:TBitmap;
begin
SetLength(task,5);
B1:=TBitmap.Create;
B2:=TBitmap.Create;
task[0]:=TTask.Create(procedure()
begin
.....
end);
task[0].Start;
task[1]:=TTask.Create(procedure()
begin
.....
end);
task[1].Start;
task[0].Wait();
task[1].Wait();
task[2]:=TTask.Create(procedure()
begin
.....
end);
task[2].Start;
task[3]:=TTask.Create(procedure()
begin
.....
end);
task[3].Start;
task[2].Wait();
task[3].Wait();
task[4]:=TTask.Create(procedure()begin
.....
end);
task[4].Start;
.....
task[4].Wait();
.....
B1.Free;
B2.Free;
end;
Podzielone jest to na etapy, gdzie poszczególne taski mogą działać równorzędnie, sam kod bez uruchamiania tasków działa bezbłędnie. W poszczególnych taskach są obrabiane bitmapy. Zainstalowałem też Lazarusa, lecz nie ogarniam go, nie mogę użyć B1:=TBitmap.Create;
ani B1.Free
, otrzymuję "Error: identifier idents no member "Create" ". Wracając do delphi zmieniałem
task[x].Wait();
na
if task[x].Status=TTaskStatus(2) then task[x].Wait();
lecz nie zmieniło to nic w działaniu.