ダウンロード.
Version | 1.00 | |
公開日 | 2006/07/18 | |
ファイルサイズ | 15kB | |
ファイル名 | synchobject100.zip | |
形式 | zip書庫 |
概要.
Windowsの同期オブジェクトのラッパークラスです。同期オブジェクトを簡単に扱えることを目標に作成しています。TComponentやTObjectから派生しているわけではないので、厳密にはコンポーネントではありません。
現在、MutexとEventと、それらの基底クラスの3つしかありません。Windowsでは同期オブジェクトとしてはSemaphore/Waitable Timer/Critical Sectionなどもありますが、これらは作っていません。何バイト君Ver. 1.30の二重起動防止のために作成したものなので、現在のところ、それに必要なものだけです。大抵はMutexで十分でしょうし、Eventで不足なら共有メモリとか必要かも。
同期オブジェクトについての詳細は、C++Builderに付属のヘルプ「Win32 Developer's Reference」の「Interprocess Synchronization」、または市販の参考書を参照してください。ヘルプは当然英語ですが。
Mutexについては、アプリケーションの二重起動防止のための手段として様々なところで紹介されていると思います。が、それらは直接Windows APIをコールするものばかり。VCLとWindows APIでは作法も見た目に違うのでアレだし。このクラスを使用することで簡単に同期オブジェクトを使用できるようになりますし、ソースの見た目も違和感あるものを混入しなくて済みます。
マニュアル&ヘルプ&サンプル.
マニュアルは別ページで。このマニュアルはアーカイブに含まれています。
ヘルプは作っていません。マニュアルで十分だと思うので。
一応、サンプルとして簡単な動作確認の出来るアプリのソースを、アーカイブに含めてあります。
使用例.
何バイト君Ver. 1.30での、二重起動防止と、起動済みの何バイト君を最前面に表示する処理の例です。説明しやすいように、実際の何バイト君のソースを多少修正しています。
以下は、[プロジェクト名].cpp のWinMain関数の最初に記述。
static TMutexObject mutexObject; extern TEventObject EventObject; // すでに起動しているか検査 if (mutexObject.Get("mutex-object-startup", SYNCHOBJ_RETURNIMMEDIATE)) { // 起動していないならイベント待ち準備 EventObject.Create(false, "event-object-focus"); EventObject.TimeOut = SYNCHOBJ_RETURNIMMEDIATE; } else { // 起動していたらイベント送信 if (EventObject.Open("event-object-focus")) { EventObject.SetEvent(); EventObject.Close(); } return 0; }
以下は、[プロジェクト名].cpp のWinMain関数の最後に記述。
// 二重起動後処理 mutexObject.Release();
以下は、[メインフォーム].cpp の最初に記述。
TEventObject EventObject;
以下は、[メインフォーム].cpp のTTimerコンポーネントのOnTimerイベントハンドラの最初に記述。
// 二重起動されたらウィンドウを前面へ if (EventObject.CheckSignal()) SetForegroundWindow(Application->Handle);
インストール/アンインストール.
インストール.
インストーラは付属していません。
ソースでの公開なので、適当に使ってください。そのままスタティックリンクするも良し、パッケージにするも良し。
アンインストール.
アンインストーラも付属していません。
改版履歴.
- …機能追加.
- …仕様変更.
- …バグフィックス.
Version | 日付 | 変更点 |
1.00 | 2006/07/18 |
|
今後の予定.
- Semaphore、Critical Sectionへの対応。
- 複数シグナル待ちへの対応。
必要になったら更新するつもりなので、いつになるかは神のみぞ知る。
ひとこと
Ver. 1.00
ダウンロードしてソースを見ればわかりますが、非常に単純です。とにかく簡単に使えることだけを考えて作りました。
何バイト君Ver. 1.30の公開時に「Mutexは別アプリ用にラッパークラスを作成中」なんて書いたけど、そのアプリで必要なくなってしまった。現在は何バイト君以外に同期の必要なものはないので、更新はいつになるやら。
コンポーネントにして、シグナル発生やタイムアウトでイベントハンドラをコールするようにしてもよかったかも。
Copyright 2005-2016, yosshie.