まず、「Mac OS X」または「OS X」です。「OS/X」というものはありません。
次に、Mac OS X には Boost が付属していません。アプリケーションにバンドルする必要があります。
第 3 に、Carbon のほとんどは 64 ビットでは使用できません。これは、Carbon のこれらの部分がいつか (Apple がハードウェアで 32 ビットを放棄したときに) なくなることを明確に示しています。遅かれ早かれ、アプリを Cocoa で書き直すか、Mac を放棄する必要があります。
通常、OS/X 上のアプリケーション バンドルは 1 回しか起動できませんが、バンドルの名前を変更するだけで、同じアプリケーションを 2 回起動できます。
いいえ、できません。名前を変更または移動したアプリケーションを起動すると、すでに実行されていたプロセスがアクティブ化 (前面に移動) されます。最初のプロセスと並んで新しい 2 番目のプロセスを開始することはありません。
アプリケーションが既に実行されているかどうかを確認するには、いくつかの方法があります。いずれの場合も、起動時にこれを行います。
- Cocoa の NSConnection を使用して、単一の定数名で接続を登録します。名前がすでに登録されている場合、これは失敗します。(Foundation は Carbon アプリから使用できます。これは注意が必要な Application Kit です。)
- Process Manager を使用して、探しているバンドル ID と一致するプロセスのプロセス リストをスキャンします。バンドル ID は変更できませんが、ファイル名や場所よりも変更が困難です。
誰かが自分の 2 番目のコピーをいつ実行したかを知りたい場合は、CFNotificationCenter を使用できます。
- 「com.yourdomain.yourappname.LaunchResponse」のオブザーバーとして自分を追加します。
- 「com.yourdomain.yourappname.LaunchCall」という名前で通知を投稿します。
- 「com.yourdomain.yourappname.LaunchCall」のオブザーバーとして自分を追加します。
Call 通知の監視コールバックで、Response 通知を投稿します。
Response 通知の監視コールバックで、終了します。
したがって、最初のプロセスが開始されると、呼び出しが行われ、応答が返されません。2 番目のプロセスが開始すると、呼び出し、最初のプロセスから応答を取得し、最初のプロセスに従って終了します。