2009-08-22 15 views
4

Ich habe ein Programm in Qt Creator 1.0.0 geschrieben (Qt Version 4.5.0), wo zu Beginn der Haupt() Funktion habe ichrand() gehorcht nicht srand() in Qt Creator

setzen
srand(time(0)); 

Dann rufe ich rand() von einem anderen Thread (Unterklasse von QThread). In dieser Funktion erzeugt rand() jedes Mal, wenn ich das Programm laufe, die gleiche Zahlenfolge. Ich führe das Programm nicht mehrmals in einer Sekunde.

Warum passiert das?

Antwort

17

Sie müssen in jedem Thread srand aufrufen, da der Seed in einem Thread-spezifischen Block gespeichert wird.

+0

Dies kann sicherlich der Fall sein. Der Standard garantiert dies jedoch nicht, und ich bezweifle etwas, dass eine Implementierung, die keinen gemeinsamen Seed verwendet, standardkonform sein würde. Immer bereit, korrigiert zu werden, jedoch! –

+0

Dies gilt nicht für QThread unter Linux? – sivic