« フォーミュラニッポン 開幕戦 | メイン | リモコンつき蛍光灯 »
2004年3月30日
電池切れMacのファイル共有
27日の日記で書いた、ファイル共有で問題が出ているという件ですが、調べていて非常に面白いことが分かったので書いておきます。まあ、本当に電池切れが原因かどうか分からないんですが、そうだと仮定して話を進めます。
まず現象としては、電池切れMacの共有ボリュームを他のMacにマウントした場合に、大きなファイルをコピーすると途中で止まってしまうというものです。(ちなみにOSはMacOS 8.6です)
調べてみると、必ずコピー開始から5秒程たつと止まるようです。そこで試しに、コピーが止まってしまったらタイムアウトする前にマシンの時計を設定し直してみたら、また動き出すではないですか! また5秒たつと止まるので、そうしたら時計を設定すると、また進みます。大きなファイルでも、これを繰り返すことで最後までコピーができることが分かりました(^^;)
もしかしてファイル共有では、時計を見て負荷をコントロールしたりしているのでしょうか? 負荷が高いと判断して転送をストップしてしまうのだとすれば、この現象は納得できます。
手作業で時計を更新するのはかなり面倒なので、それをやるバックグラウンドアプリを作ってみました。単純に1秒毎にシステム時刻の秒をカウントアップするだけのプログラムです。カウントアップする部分のプログラムはこんな感じ(^^;)
unsigned long dateTime;
GetDateTime( &dateTime );
dateTime++;
SetDateTime( dateTime );
1秒毎に実行させるにはWaitNextEvent()のスリープパラメーターを60(Ticks)にする方法を使いました。精度を考えればVBLタスクを使うなどの方法もあったんですが、面倒だし、実際にはネットで(NTPで)時計合わせするツールも併用するので、これでじゅうぶんです。
EventRecord event;
WaitNextEvent( everyEvent, &event, 60, nil );
起動項目に設定して、これでほぼ問題なく稼働するようになりました。どうせテストくらいにしか使わないマシンだし、もうバッテリーを買う必要なくなったかも?(^^;)
コメント
よろしければコメントしてください。
※メールアドレス以外の項目はこのページ上に公開されます。個人情報などの入力にはご注意ください。