ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

FileStream で二重起動防止 

更新 : 2010/05/15

 



解説:
アプリケーションの種類によっては、ユーザーに二重起動されてはまずいケースがあります。
そのような時、二重起動を防止するのに、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;
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.