|
第5話
|
|
多重起動を防止せんとな
|
| もしもし、わしゃフクロウじゃ。 まだ名はないがの。 分かってるってか? 一応、お約束ってことにしようかと思ってな。 ほ〜っほっほっほ。 |
|
| 前回はどこまでだったかのぉ... 最近、年のせいか物忘れがはげしくてのぉ。 アイコン作って、Aboutダイアログを用意したとこじゃったな。 |
|
|
じゃ、今回は「多重起動の防止方法」についてでも教えてやるかの。 |
|
|
試しに今までに作ったMirrorWeb.exeを2回起動してみてくれんかの。 |
|
| Windowsアプリケーションには、複数も起動できてしまうと不都合が起きる場合があるんじゃ。 片方で処理中に、もう片方で処理してしまうと困るわけじゃな。 |
|
|
例えばMirrorWebの場合、片方でサーバのファイルを更新中に、もう片方でサーバからファイルをダウンロードしてしまったとしよう。 |
|
| 複数起動されたプログラム同士が、うまく同期を取って処理するという方法も考えられるかもしれんが、多重起動を防止して回避するという方法もある。 MirrorWebの場合、多重起動が防止してあれば十分じゃろ。 |
|
| さてその防止方法なのじゃが、Windows内にMutexというグローバルなオブジェクトを作り出すんじゃ。 で、起動時にMutexオブジェクトが存在するかどうかを判定すれば、MirrorWebが既に起動されているかどうかが分かるというわけじゃ。 |
|
| この防止処理は、「CMirrorWebApp」クラスの「InitInstance()」メンバ関数、「ExitInstance()」メンバ関数に手を入れて実現できる。 何故それらのメンバ関数に手を入れるのかは、この第5話後半で述べることにして、まずは手順だけをお伝えすることとしようかのぉ。 |
|
|
まずはInitInstance()への処理の追加じゃ。 ファイルを開くには、左側のペインから「FileView」->「MirrorWebファイル」->「Source Files」から「MirrorWeb.cpp」をダブルクリックするだけじゃ。 |
|
|
|
| 次はExitInstance()への処理の追加じゃが、MirrorWeb.cppのどこを見てもそんなものありゃせんじゃろ? ほ〜っほっほっほ。 当たり前じゃ、ちゃんとおぬしが用意せねばの。 |
|
| [表示]->[ClassWizard]、またはCtrl+Wキーで「ClassWizard」を開くのじゃ。 「オブジェクトID」に「CMirrorWebApp」、「メッセージ」に「ExitInstance」を選択し、「関数の追加」ボタンを押すわけじゃ。 さらにそこから「コード編集」ボタンを押す。 |
|
| するとCMirrorWebAppにExitInstance()が追加された上に、ExitInstance()の場所が画面に開かれるはずじゃ。 | |
| ほ〜っほっほっほ。 すごいじゃろ? 当たり前じゃ、わしはフクロウ、名はないがな。 |
|
| でもって 「// TODO: この位置に〜〜〜」 と書いてあるコメントの直後に次のコードを加えるんじゃな。 |
|
|
|
| できたかの? まだまだ続くぞい。 ほ〜っほっほっほ。 |