Forráskód Böngészése

Stop cover worker before clearing books

Bernardo Magri 4 hónapja
szülő
commit
52a510cd19
2 módosított fájl, 30 hozzáadás és 0 törlés
  1. 5 0
      src/bookcollection.pas
  2. 25 0
      src/unitCoverWorker.pas

+ 5 - 0
src/bookcollection.pas

@@ -32,6 +32,9 @@ end;
 
 
 implementation
 implementation
 
 
+uses
+  unitCoverWorker;
+
 { TBookCollection }
 { TBookCollection }
 
 
 procedure TBookCollection.Clear;
 procedure TBookCollection.Clear;
@@ -39,6 +42,7 @@ var
   i : Integer;
   i : Integer;
   book : TBook;
   book : TBook;
 begin
 begin
+  CoverWorkerStop;
   for i := mList.Count - 1 downto 0 do
   for i := mList.Count - 1 downto 0 do
   begin
   begin
     book := TBook(mList[i]);
     book := TBook(mList[i]);
@@ -81,6 +85,7 @@ destructor Tbookcollection.Destroy;
 var i:Integer;
 var i:Integer;
     book:TBook;
     book:TBook;
 begin
 begin
+  CoverWorkerStop;
   for i:=0 to mList.Count-1 do
   for i:=0 to mList.Count-1 do
       begin
       begin
         book:= (TBook(mList.Items[i]));
         book:= (TBook(mList.Items[i]));

+ 25 - 0
src/unitCoverWorker.pas

@@ -20,6 +20,9 @@ procedure CoverWorkerEnqueueBookIfMissing(B: TBook);
   queue is empty. Call again later to restart if you enqueue more books. }
   queue is empty. Call again later to restart if you enqueue more books. }
 procedure CoverWorkerStart;
 procedure CoverWorkerStart;
 
 
+{ Stops the background worker and clears any pending books }
+procedure CoverWorkerStop;
+
 implementation
 implementation
 
 
 type
 type
@@ -179,6 +182,28 @@ begin
   end;
   end;
 end;
 end;
 
 
+{ Stops the worker and clears any queued books }
+procedure CoverWorkerStop;
+var
+  l: TList;
+begin
+  if GWorker <> nil then
+  begin
+    GWorker.Terminate;
+    GWorker.WaitFor;
+    GWorker := nil;
+  end;
+  if GPdfQueue <> nil then
+  begin
+    l := GPdfQueue.LockList;
+    try
+      l.Clear;
+    finally
+      GPdfQueue.UnlockList;
+    end;
+  end;
+end;
+
 {--- worker --------------------------------------------------------------------}
 {--- worker --------------------------------------------------------------------}
 
 
 procedure TCoverWorker.DoApplyCover;
 procedure TCoverWorker.DoApplyCover;