OSDN Git Service

設定保存完了時にメッセージを表示するように修正
[gikonavigoeson/gikonavi.git] / ThreadControl.pas
index 6553101..8b09718 100644 (file)
@@ -4,7 +4,7 @@ interface
 
 uses
        SysUtils, Classes, Controls, Forms, IdHTTP, IdComponent,
-       HTTPApp, GikoSystem, BoardGroup, ItemDownload;
+       {HTTPApp,} YofUtils, GikoSystem, BoardGroup, ItemDownload;
 
 type
        TThreadControl = class(TThread)
@@ -18,7 +18,7 @@ type
                FOnWorkEnd: TGikoWorkEndEvent;
                FOnDownloadEnd: TDownloadEndEvent;
                FOnDownloadMsg: TDownloadMsgEvent;
-               procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer);
+               procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
                procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
                procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
                procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
@@ -56,10 +56,13 @@ destructor TThreadControl.Destroy;
 var
        i: Integer;
 begin
-       for i := 0 to FThreadList.Count - 1 do begin
-               TDownloadThread(FThreadList[i]).Free;
+    FThreadList.Pack;
+       for i := FThreadList.Count - 1 downto 0 do begin
+       TDownloadThread(FThreadList[i]).Free;
        end;
+    FThreadList.Capacity := FThreadList.Count;
        FThreadList.Free;
+    FItemList.Clear;
        FItemList.Free;
        inherited;
 end;
@@ -103,11 +106,16 @@ begin
                        end;
                        FAbort := False;
                end;
+        Application.ProcessMessages;
        end;
+    // \8ec\82Á\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\91S\82Ä\8fI\97¹\82³\82¹\82é\81B
        for i := 0 to FThreadList.Count - 1 do begin
+        TDownloadThread(FThreadList[i]).Abort;
                TDownloadThread(FThreadList[i]).Terminate;
-               if TDownloadThread(FThreadList[i]).Suspended then
+               if TDownloadThread(FThreadList[i]).Suspended then begin
                        TDownloadThread(FThreadList[i]).Resume;
+            TDownloadThread(FThreadList[i]).WaitFor;
+        end;
        end;
 
 end;
@@ -163,10 +171,10 @@ begin
        FMaxThreadCount := Count;
 end;
 
-procedure TThreadControl.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer);
+procedure TThreadControl.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
 begin
        if Assigned(OnWorkBegin) then
-               OnWorkBegin(Sender, AWorkMode, AWorkCountMax, Number);
+               OnWorkBegin(Sender, AWorkMode, AWorkCountMax, Number, AWorkTitle);
 end;
 
 procedure TThreadControl.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);