IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Multithreading Discussion :

qrand : toujours le même nombre 'aléatoire" dans tous les fils


Sujet :

Multithreading

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut qrand : toujours le même nombre 'aléatoire" dans tous les fils
    Bonjour à tous,
    j'ai un problème de qrand qui génère toujours le même nombre. Pourtant j'utilise une seule fois qsrand pour initialiser le RNG. Voilà l'organisation du code :
    Il y a 2 threads qui font chacun des calculs,

    1-ils sont crées et initialisés depuis main (qsrand est appelé à l'initialisation de chaque thread)
    2-ensuite ils sont executés (run) en même temps
    3-le premier qui a fini attend l'autre (wait)
    4-des opérations de synchro des données des thread sont faites
    5-ils sont à nouveaux exécutés (run), on recommence donc à 2-

    etc etc

    Dans le run de chaque thread, j'ai besoin de nbr aléatoires mais c'est toujours les mêmes qui sont générés.
    Pourriez vous me dire où ça cloche ? c'est comme si à chaque run il y avait un appel à qsrand avec le même seed, ce qui n'est pas dans mon code.
    Merci !

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2013
    Messages : 2
    Par défaut
    Bonjour,

    Il faut initialiser qsrand de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qsrand(static_cast<uint>(QTime::currentTime().msec()));

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    bonjour,
    c'est dèjà ce que je fais dans l'initialisation des threads, mais les nombres crées à chaque run (plusieurs centaines d'appels aux run) sont tjrs les mêmes. C'est à dire que les nombres générés par le run N et le run N+1 sont les mêmes.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Par défaut
    qsrand() une seule fois (peut-être dans le main) puis qrand() ?
    Je comprends que tu initialises dans le tread ...
    Si non, il faut que ton tread soit au dessus de la milliseconde
    .msec()
    Et encore :
    Note that the accuracy depends on the accuracy of the underlying operating system; not all systems provide 1-millisecond accuracy.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mai 2017
    Messages : 18
    Par défaut
    Cela doit rester portable ?

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Pas d'utilité de portabilité, c'est destiné à windows.
    Mettre qsrand() dans le run ne peut pas marcher : les run ont une durée d’exécution très constante et de l'ordre de quelque millisecondes. Donc on aurait plus de caractère aléatoire.

    A mon avis il y a quelque chose que je ne vois pas, genre une initialisation systématique du RNG à chaque run, et qu'il faudrait désactiver.
    j'aimerais bien comprendre...

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/03/2014, 20h55
  2. Réponses: 5
    Dernier message: 12/12/2010, 23h04
  3. [AC-2007] Copie d'un champ dans tous les enregistrements (même champ)
    Par toumack dans le forum IHM
    Réponses: 6
    Dernier message: 26/09/2009, 23h31
  4. Augmenter le nombre de fenêtres dans tous les programmes xp
    Par pierrot67 dans le forum Windows XP
    Réponses: 2
    Dernier message: 17/07/2007, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo