掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
実行のあるなしを判定するには? (ID:22844)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
1つのインスタンスしか存在させたくないのですよね。 呼出し側で判定しないで、Singletonパターンで呼出し先で管理させては どうですか? タイミングの問題とか考えるとこの方が、安全だと思います。 例)スレッド側 unit Unit2; interface uses Classes, SysUtils, Windows; type TMyThread = class(TThread) private { Private 宣言 } FCnt: Integer; procedure UpdateCaption; protected { protected 宣言 } procedure Execute; override; public { Public 宣言 } class function GetInstance(reateSuspended: Boolean): TMyThread; constructor Create(reateSuspended: Boolean); destructor Destroy; override; end; implementation uses Unit1; var Singleton: TMyThread; { MyThread } procedure TMyThread.Execute; begin { ToDo : スレッドとして実行したいコードをここに記述 } while not Terminated do begin Synchronize(UpdateCaption); Sleep(100); end; Free; end; procedure TMyThread.UpdateCaption; begin Form1.Caption := IntToStr(FCnt); inc(FCnt); end; class function TMyThread.GetInstance(reateSuspended: Boolean): TMyThread; begin // インスタンスを常に1つにする。 if not Assigned(Singleton) then begin Singleton := TMyThread.Create(reateSuspended); end; Result := Singleton; end; constructor TMyThread.Create(reateSuspended: Boolean); begin inherited Create(reateSuspended); FCnt := 0; end; destructor TMyThread.Destroy; begin Singleton := nil; inherited; end; end. 呼出し側 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, StdCtrls, Unit2; type TForm1 = class(TForm) btnStart: TButton; btnEnd: TButton; procedure btnStartClick(Sender: TObject); procedure btnEndClick(Sender: TObject); private { Private 宣言 } FMyThread: TMyThread; public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.btnStartClick(Sender: TObject); begin FMyThread := TMyThread.GetInstance(False); end; procedure TForm1.btnEndClick(Sender: TObject); begin FMyThread.Terminate; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.