|
| fonction hasard : bug inattendu ! |
| Iniciado por christophe.pradel, 10,ene. 2019 10:14 - 6 respuestas |
| |
| | | |
|
| |
| Publicado el 10,enero 2019 - 10:14 |
Bonjour,
Je viens d'expérimenter par hasard (c'est la cas de la dire) un bug sur la fonction hasard :
Lorsqu'elle est utilisée au sein d'un thread, elle renvoie toujours la même valeur !!!
Testé sous W24. Je ne sais si c'est le cas des versions précédentes
Exemple :
Initialisation de la fenêtre :
InitHasard()
Code d'une procedure locale de la fenetre
Procedure GetHasard()
Trace("Hasard 1 : " + Hasard()) Trace("Hasard 2 : " + Hasard(1000)) Trace("Hasard 3 : " + Hasard(1000, 2000))
Code d'un bouton lançant la procédure dans le thread principal :
GetHasard()
On obtient, pour trois clics :
Hasard 1 : 0.3841059602649 Hasard 2 : 280 Hasard 3 : 1761 Hasard 1 : 0.03311258278146 Hasard 2 : 906 Hasard 3 : 1204 Hasard 1 : 0.1148411511582 Hasard 2 : 803 Hasard 3 : 1466
Code d'un bouton lançant la procédure dans un thread secondaire :
ThreadExecute("TestHasard",threadNormal,GetHasard)
On obtient, pour trois clics :
Hasard 1 : 0.001159703360088 Hasard 2 : 236 Hasard 3 : 1648 Hasard 1 : 0.001159703360088 Hasard 2 : 236 Hasard 3 : 1648 Hasard 1 : 0.001159703360088 Hasard 2 : 236 Hasard 3 : 1648
Merci de me confirmer que vous constatez le même problème chez vous.
Bien sûr, il est facile de contourner ce problème, mais j'ai préféré faire ce post pour éviter à certains de perde du temps en débug avant de découvrir le pot aux roses... |
| |
| |
| | | |
|
| | |
| |
| Publicado el 10,enero 2019 - 10:39 |
Et si tu met InitHasard() dans ta procédure GetHasard() ? Cdt |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 29 mensajes |
|
| Publicado el 10,enero 2019 - 10:47 |
| Je viens de tester en 24 aussi, ça fait pareil chez moi. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 10,enero 2019 - 11:22 |
En windev 20 : idem. Mais InitHasard dans GetHasard règle le problème. |
| |
| |
| | | |
|
| | |
| |
| Publicado el 10,enero 2019 - 11:28 |
Merci pour vos réponses
Effectivement InitHasard dans le thread corrige le problème |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 139 mensajes |
|
| Publicado el 10,enero 2019 - 14:59 |
| si le lancement des thread est très rapproché et que 2 thread appellent InitHasard() dans le même centième de seconde, les séquences produites par la fonction Hasard de ces deux thread seront identiques. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 1.640 mensajes |
|
| Publicado el 10,enero 2019 - 15:26 |

Comme indiqué dans la doc, la fonction Hasard() DOIT être initialisée par InitHasard() Et ce n'est pas une histoire de thread.
La fonction Hasard() non initialisée renverra toujours la même chose a chaque exécution du programme. |
| |
| |
| | | |
|
| | | | |
| | |
|