Zitat von
Nailor:
Vielen Dank für diesen netten Hinweis. Man kann übrigens Randomize auch öfter aufrufen, wenn man immer mit einer davor erzeugten Zufallszahl den Seed neu setzt...
Öhmm, falsch. Ja man kann den Wert setzen, aber dieses macht keinen Unterschied. Es wird die aktuelle Uhrzeit genutzt. Deshalb kann es bei mehreren Aufrufen auch zu Problemen kommen. Von daher gilt die Faustregel: nur einmal beim Programmstart aufrufen. Hier mal der Source-Code zu Randomize, daran fällt auf, daß der Wert von RandSeed keine Rolle spielt, er wird einfach nur gesetzt (letzte Zeile).
Delphi-Quellcode:
procedure Randomize;
var
systemTime :
record
wYear : Word;
wMonth : Word;
wDayOfWeek : Word;
wDay : Word;
wHour : Word;
wMinute : Word;
wSecond : Word;
wMilliSeconds: Word;
reserved :
array [0..7]
of char;
end;
asm
LEA EAX,systemTime
PUSH EAX
CALL GetSystemTime
MOVZX EAX,systemTime.wHour
IMUL EAX,60
ADD AX,systemTime.wMinute
{ sum = hours * 60 + minutes }
IMUL EAX,60
XOR EDX,EDX
MOV DX,systemTime.wSecond
ADD EAX,EDX
{ sum = sum * 60 + seconds }
IMUL EAX,1000
MOV DX,systemTime.wMilliSeconds
ADD EAX,EDX
{ sum = sum * 1000 + milliseconds }
MOV RandSeed,EAX
end;
...
...