fc2ブログ

NALT Ver1.20

時刻取得に関し大きなミスに気がついたので修正版です。
修正しているうちに色々直したいところもあれこれ出てきたので一緒に修正。

NTPサーバから取得される時間が一定でないのはネットワークの遅延のせいだと思ってましたが、調べてみた結果ミリ秒の取得方法は取得したデータ×200ピコ秒ではなく32bitの小数点で計算方法が違ってました。
RFCには「約200ピコ秒の精度」って書いてあるのを勘違い。参考にしたサンプルも200ピコ秒で計算してましたし。
答えは(取得したデータ×1000)>>32が正解ですね。
RFCは間違ってない、確かに"約"だし。

それから他にも精度の悪いGetTickCountを使うのやめてQueryPerformanceCounterで計算したりして精度を高めテストした環境では1ms以下の誤差で修正できるようになりました。
ただし、OSがME(多分9x系は)だとSetLocalTimeの際に時刻がずれてしまう様なのでどうしても少し誤差が発生してしまいますね。

これら機能修正のためにファイルサイズが大きくなってしまったので一旦はソースをほぼアセンブラ化。
ただ、リリースバージョンを後で逆アセンブラとかして調べてみるとアセンブラ化した事で逆にサイズが増えてた部分も多々あり結局大分元に戻しましたが。VC++の最適化は凄いと噂には聞いてはいましたが実際に調べてみると凄いですね。
それでもなんだかんだで機能を増やしたにも係わらず100バイト程度の削減に成功。とは言え512バイト減らさないとファイルサイズは変わらないので見た目変化ありませんが。

実はこのバージョンは一月以上前には完成していて何時でも公開できる状態でしたが色んなPCで動作テスト(環境の違いでどの程度誤差が出るか)してみたくて暫く放置。
ネットカフェとかのPCでテストしてみようかなと思ってましたが、実際に行ってテストしようとすると動作せず。WindowsのTimeサービスもエラーで止まってるのでどうもルータ辺りでNTPのポートが塞がれてる様子。
試したのは2店だけですが結構セキュリティーしっかりしてるもんですね。PC自体はadmin権限で動作してるから甘いと思ってましたが。
結局テストは手元の環境の2台だけしかしてませんが、せっかく作ったのにこれ以上放置するのもなんなので公開することにします。


一通り修正してみる企画はひとまずこれで休止。結局3つだけしか直してないですね。まぁ後は殆ど需要ないですから直す気になれません。
今は個人用にソフトを作ってますので暫く他のソフトのバージョンアップは何かしら無ければしないでしょう。
この頃と言っても大分前からですが愛用していた某FTPソフトの改悪が酷くまともに動かなくなってるので自分に必要な機能だけを絞ったクローンでも作ろうかなと設計中。
旧バージョンを使えれば良いのですが起動時にバージョンチェックしてて古いバージョンは起動できない設計になってるのでどうしようもありません。
まともなのが完成したら公開するかも知れませんが、結構面倒なソフトだし途中で投げ出す可能性も大なので期待しないでください。
・・・最初から期待などしてない?これまた失礼しました(汗


以下、修正点の詳細です。

続きを読む

スポンサーサイト



新規記事の投稿


月別アーカイブ
カテゴリー
リンク
ブログ内検索
RSSフィード