2

現在の時刻/日付とランダムなスライドショーを表示するモニターがあります。スライドショーが開始されると、ディレクトリ内のすべての画像ファイルのリストが作成され、ランダム化され、空になるまでそこから画像がポップされ、空になると新しい画像が生成されます。特定の間隔で写真をポップします。

すばらしい背景画像になりそうな写真を見つけたので、それを見つけたいと思います。問題は、約 50 GB の写真があり、それらを手動で検索しないことです。

私の計画は、スライドショーでランダム オブジェクトのシードを見つけることです。ランダム オブジェクト コンストラクターでシードを指定しない場合、Enviroment.TickCount プロパティが使用されます。このプロパティは、システムが起動してからのミリ秒数を返します。

画像がいつ画面に表示されたかはおおよそわかっており、プロセスは開始時刻を記憶しているため、実際にランダム オブジェクトのシードを計算できました。また、新しいシーケンスを生成するときに 5 秒の遅延があるため、スライドショー シーケンスの最後の画像を覚えているので、シードが正しいかどうかを簡単に確認できます。

ただし、DateTime.Now はミリ秒単位の精度ではないように思われるため、それを整理できれば、チェックする画像ははるかに少なくなります。

Sub Main()
    Dim SystemStartTime = Now.AddMilliseconds(-Environment.TickCount)

    Console.WriteLine(SystemStartTime.Millisecond) REM Prints different numbers each time. They should be equal
    Console.ReadLine()
End Sub
4

1 に答える 1

0

Environment.TickCount適切に使用するのは少し難しいです。これは 32 ビットの符号付き整数であるため、約 24.9 日である 2,147,483,647 ティックで最大になります。次のティックは -2,147,483,648 で、これはです。DateTimeしたがって、エラーの危険を冒さずに単に追加することはできません。あなたのコードは、ある種のキオスク ディスプレイ上で実行される可能性があるように思えます。これらの MSDN ドキュメントを参照してください。

別の問題 -ローカルの日付/時刻DateTime.Nowを返します。これは、コンピューターのタイム ゾーンに合わせて調整されます。これは、夏時間のために変動する可能性があります。まったく時計に基づいていない場合は、おそらく代わりに使用する必要があります。DateTime.UtcNow

精度について - 型の精度DateTimeは非常に優れていますが(1000 万ティック == 1 秒)、Windows システム クロックの精度は約 10 ~ 30 ミリ秒です (ハードウェアと Windows のバージョンによって異なります)。正確 な読み取り値が得られるという保証はありません。時計の精度が非常に高い場合でも、時計のずれを考慮する必要があります。また、ユーザーはいつでも時計を変更できることを覚えておいてください。インターネットを介して定期的に時計を同期しても、そのレベルの精度は保証されません。

この MSDN の記事を読むことをお勧めします。また、 accuracy vs precisionを読むことができます。

余談ですが、本当に高精度高精度の両方が必要な場合は、この会社や他の会社が販売しているstratum 0タイム ソースが必要です。あなたが説明したアプリケーションにとって、これはやり過ぎだと確信しています。

于 2013-08-01T15:26:24.483 に答える