|
||
解説: アプリケーションの種類によっては、ユーザーに二重起動されてはまずいケースがあります。 そのような時、二重起動を防止するのに、Mutex 関数を使ってコーディングするのが一般的です。 それもいい方法ですが、今回は FileStream を利用したコードを考えてみます。 使用例: 例では、アプリケーション起動中、共有禁止ファイルを開いておいて、アプリケーションが二重に開かれるのを防いでいます。 コンポーネントの配置は、特にありません。 流れとしては、アプリケーション起動時、FileStream で共有禁止にしたファイルを開きます。 同じファイルは開けませんので、アプリケーションは二重に起動できなくなります。 ファイルを共有禁止にするのは、コンテキストスイッチ(CPU の状態を保存、復元する過程のこと。これで複数のプロセスが CPU を共有できる)の発生を考慮してです。 今回は、アプリケーション終了時に共有ファイルを削除していません。削除して、再び作るか、そのままにしておくか、ケースバイケースで使い分けてください。 プロセスが異常終了した場合、ファイルが残りますので、対応しておく必要があります。 TFileStream *stream; //------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { try { // 共有禁止で新しく作る stream = new TFileStream("mutex.ch", fmCreate | fmShareExclusive); } catch(...) { ShowMessage("すでに起動しています!!"); Application->Terminate(); } } //------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { delete stream; } //------------------------------------------------------------------- |