2016-08-10 5 views
2

システムクロック時間に基づいていない乱数をバッチファイルで作成したいとします。システムクロックに基づいていないCMDで乱数を生成する方法

私は%RANDOM%を使用しようとしていますが、私のニーズにはうまく対応していません。

なぜなら、マルチプルスレッドで受信しているファイル名をファイルに書きたいからです。システムタイムを%RANDOM%メソッドで使用すると、システム時間が秒単位で、ファイル間で衝突が発生します。ミリ秒単位ではありません。

だから私はあなたがスレッドを持っている場合は、必要に応じて、その後、他のスレッドに乱数を提供乱数発生器のスレッドを追加

+3

信頼できるインターネット接続があれば、random.orgに問い合わせることができます – npocmaka

+0

残念ながら、コードを実行している私のシステムはオフラインサーバーです:) –

+0

_random number_または[一意のファイル名](http ://stackoverflow.com/q/27802376/3439404)? – JosefZ

答えて

2

問題が複数のスレッドを実行している場合は、各バッチファイルに異なるスレッド(たとえばid)の「固有のID」変数を付けて、末尾に「%random%」を追加してそれぞれ。例:

複数スレッドの場合は問題ありません。

+0

ことは、私は同時に100個のスレッドを同時に処理していることです.1つのプロセスから起動します。 –

+0

このメソッドは、起動する単一のプロセスが、各スレッドは異なるIDを持ちます。 – Monacraft

+0

は真ですが、プロセスは第三者であり、バッチファイルを起動するときにidを生成しません。 –

2

...システム時刻以外の何か他のものに基づいて乱数を生成する方法が必要です。そのスレッドで実行される単一のRNGをクロックから一度だけ初期化します。他のスレッドは、ランダムジェネレータスレッドを呼び出して、シーケンス内の次の乱数を取得します。

クロックは、ランダムスレッドが開始されるときに1回だけ使用されるため、ランダムスレッドが1秒以上実行される限り、時間の衝突の問題は発生しません。

必要に応じて、他のスレッドは単一の乱数を使用して独自のRNGをシードして、より多くの数を生成することができます。

+0

これはうまくいくかもしれませんが、DOSバッチではあまりにも複雑です:) –

関連する問題