NW 45 - クライアント/サーバシステムをスリープ状態にする (97 年 1 月 9 日)
Q: 現在、ファックスクライアント/サーバシステムを開発しているのですが、サーバをスリープ状態にした後で問題が発生します。スリープを解除するとき、サーバソフトウェアがネットワーク上で再登録を行うことができません (RegisterMyName を使って)。
クライアント側では、sleepDemand リクエストを受信したとき、ネットワークアクティビティがなくなるのを待って、制御をシステムに返します。クライアントでは、問題なくスリープの解除とサーバへの再接続を行うことができます。
この問題を解決するには、どのような対処を行えばいいのでしょうか。
A: 一般に、サーバの自動スリープ機能を無効にしたい場合は、AutoSleepControl(false) を使って Power Manager に通知を行います。そうでないと、クライアントはサーバがスリープ中であることを正しく認識できず、結果的に接続することができません。一方、自動スリープ機能をサポートしたい場合は、Power Manager の SleepQInstall を使ってスリーププロシージャをインストールする必要があります。
サーバが sleepRequest/SleepDemand をどのように処理すべきかについては、『Inside Macintosh: Devices』の 6-10 ページにある表 6-1 で詳しく説明されています。結局のところ、サーバをクローズしてネットワークから登録を解除し、その後、sleepWakeUp を受信したときに再オープンと再登録を行うことになります。
Q: スリーププロシージャをインストールしました。しかし、ユーザが“特別”メニューの“スリープ”を選択しても、Power Manager は sleepDemand を発行しません。AutoSleepControl(false) は sleepRequest を無効にするはずですが、SleepDemand も無効にしてしまうのでしょうか。
A: 『Inside Macintosh: Devices』の 6-11 ページに書かれているように、アプリケーションは sleepDemand を拒否できません (また、そうすべきでもありません)。
sleepDemand を受け取るとき、スリーププロシージャでは、それが条件付きの sleepDemand であるか 無条件の sleepDemand であるかを判断できません。このため、sleepDemand を受け取ったとき、デバイスドライバとアプリケーションは、スリープ状態の準備を行い、制御を迅速に Power Manager に返す必要があります。
AutoSleepControl については、『Inside Macintosh: Devices』の 6-44 ページも参照してください。
enableSleep に false が設定されていると、ユーザの操作 (たとえば、Finder の“特別”メニューから“スリープ”を選ぶなど) あるいはバッテリ不足による無条件の要求でないかぎり、コンピュータがスリープモードに入ることはありません。
--Vinnie Moscaritolo
devsupport@apple.com
[ Technical Q&A's : Communications & Collaboration : Networking : NW45 ]
|