The newest Delphi comes with anonymous Threads, which are a very easy way to make your application multithreaded, which is very useful to make some big calculations in the background, while the UI is still responding. However, sometimes you need things to be done in order. Enter TTasklist:
type
TProc = reference to procedure;
TTaskList = class
private
fTasks : TThreadedQueue<TProc>;
fTerminated : boolean;
procedure start;
public
constructor Create;
destructor Destroy; override;
procedure addTask(aTask : TProc);
procedure Terminate;
end;TTaskList uses a ThreadSafe Queue to store the tasks, which are basically anonymous methods. The constructor creates the queue and starts a new thread which executes one task after another.
constructor TTaskList.Create;
begin
fTasks := TThreadedQueue<TProc>.Create;
fTerminated := false;
start;
end;
procedure TTaskList.addTask(aTask: TProc);
begin
fTasks.PushItem(aTask);
end;
procedure TTaskList.start;
begin
TThread.CreateAnonymousThread(
procedure
begin
while not fTerminated do
begin
if fTasks.QueueSize > 0 then fTasks.PopItem.Invoke;
end;
end
).Start;
end;
procedure TTaskList.Terminate;
begin
fTerminated := true;
end;
destructor TTaskList.Destroy;
begin
Terminate;
fTasks.Free;
inherited;
end;Download is available here.
Keine Kommentare:
Kommentar veröffentlichen