2009-08-22 6 views
4

J'ai écrit un programme dans Qt Creator 1.0.0 (Qt version 4.5.0) où au début de la fonction main() j'ai misrand() n'obéit pas srand() dans Qt Creator

Puis j'appelle rand() à partir d'un autre thread (sous-classe de QThread)
srand(time(0)); 

Dans cette fonction, rand() produit la même séquence de nombres chaque fois que je lance le programme. Je ne cours pas le programme plusieurs fois dans une seconde.

Pourquoi cela se produit-il?

Répondre

17

Vous devez appeler srand dans chaque thread, car la graine est stockée dans un bloc spécifique au thread.

+0

Cela peut certainement être le cas. La norme ne le garantit cependant pas, et je doute qu'un peu de mise en œuvre qui n'utilise pas une semence commune soit conforme aux normes. Toujours prêt à être corrigé, cependant! –

+0

Ceci n'est pas valide pour QThread sous Linux? – sivic

Questions connexes