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

C++Builder Discussion :

question sur 'threads' et 'random'


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 23
    Par d�faut question sur 'threads' et 'random'
    Salut!!!

    Je suis en utilisant 'randomize' avant de lancer les fils (threads) et en chaque fil je suis en utilizant 'random', mais le nombre g�n�r� est egal pour tous mes fils. Alors Comment je peux faire pour g�n�rer nombres al�atoires differents dans chaque fil?.
    Je suis en travaillant avec l'API de Windows sur C++ Builder 4.0

    Merci...

  2. #2
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Salut,
    J'ai cr�� 10 threads et fait comme toi: un randomize() avant de les lancer, mais pour moi j'obtiens bien 10 nombres al�atoires ind�pendants.

    Es tu sur de ce que tu affiches ?
    Comment v�rifis tu ces nombres ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 23
    Par d�faut
    Je suis en utilisant le random dans le corps de chaque fil (m�thode DWORD WINAPI function(void *)), j'ai plusieurs fils et je suis en affichant le nombre de chaqu'un avec une structure independant (liste) ainsi:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    randomize();
     
    for(int i=0;i<n_fils;i++){//nombre de fils à crèer
     
    d_param=anx_liste(d_param,cad,0);//Anexer noeuds à une liste dinámique
     
    //Trouver le dernier noeud
    dernier=d_param;
    while(dernier->suivant!=NULL){
    dernier=dernier->suivant;
    }
     
    //Créer le fil avec le dernier noeud de la liste comme parámetre
    dernier->id_fil=CreateThread(0,0,function,dernier,CREATE_SUSPENDED,NULL);
    if(dernier->id_fil==NULL){
    ShowMessage("Erreur");
    d_param=elimliste(d_param);
    Application->Terminate();
    }
    //Demarrer le fil
    ResumeThread(dernier->id_fil);
     
    }
     
    //Attendre tous les fils
    liste aux=d_param;
    while(aux!=NULL){
    WaitForSingleObject(aux->id_fil,INFINITE);
    aux=aux->suivant;
    }
     
     
    /***** function du fil *******/
    DWORD WINAPI function(void *x){
     
    liste p=(liste)x;
    double sum=0;
    p->resp=random(100);
    ExitThread(0);
    return NULL;
    }
    /****************/
    A l'heure de parcourrir la liste tous les par�metres 'resp' de chaque fil ont le m�me valeur.

    Qu'est ce que je suis en faisant mal?

    Merci...
    Pense a mettre les balises de code le # en haut a droite, ce sera plus agreable a lire pour tous

  4. #4
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Je ne vois pas o� tu �cris dans "dernier->suivant", le probl�me se situe plut�t au niveau de ta liste cha�n�e je pense.

    Voil� mon code pour la cr�ation de threads, si ca peux t'aider. Mais je ne pense pas que le probl�me vienne de l�:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            for (i = 1; i < 20; i++)
            {
                if ( (thread_id = _beginthread(thread_code,4096,(void *)i) ) == -1)
                {
                   Memo2->Lines->Add("Unable to create thread"+ IntToStr(i)+", errno = "+IntToStr(errno));
                }
                Memo2->Lines->Add("Thread "+ IntToStr(i)+ " Created " +", ID = "+IntToStr(thread_id));
            }
    et le code des threads:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
            for ( int x=0 ; x<Form1->ControlCount ; x++)
            {
                if(Form1->Controls[x]->Name == "Edit"+IntToStr(PID))
                    ((TEdit*)Form1->Controls[x])->Text = "random = "+IntToStr(random(100));
            }
    Le code du thread cherche le composant TEdit li� � son ID pour y afficher son random.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Ao�t 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 23
    Par d�faut
    Salut!!!

    encore rien...

    J'ai fait exactement le m�me code et rien.

    Tout le code est le suivant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <process.h>
    #pragma hdrstop
     
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    void thread_code(void *);
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      unsigned long thread_id;
      int i;
      randomize();
     
      for (i = 1; i < 20; i++)
      {
          if ( (thread_id = _beginthread(thread_code,4096,(void *)i) ) == -1)
          {
             Memo2->Lines->Add("Unable to create thread"+ IntToStr(i)+", errno = "+IntToStr(errno));
          }
          Memo2->Lines->Add("Thread "+ IntToStr(i)+ " Created " +", ID = "+IntToStr(thread_id));
      }
     
    }
    //---------------------------------------------------------------------------
     
    void thread_code(void *x){
     
      int PID=(int)x;
     
      for ( int x=0 ; x<Form1->ControlCount ; x++)
      {
          if(Form1->Controls[x]->Name == "Edit"+IntToStr(PID))
              ((TEdit*)Form1->Controls[x])->Text = "random = "+IntToStr(random(100));
      }
    }
    //---------------------------------------------------------------------------
    et dans le formulaire j'ai 19 composants TEdit et dans chaqu'un "random = 46", dans le TMemo il y a 19 Threads avec ID's differents.

    Alors, Qu'est ce que je dois faire?

    Merci...

  6. #6
    Membre �m�rite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    916
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 916
    Par d�faut
    Et si tu ajoutes un randomize() avant de faire ton random(100) dans chaque thread, tu as le m�me probl�me.

Discussions similaires

  1. Question sur le programme Random
    Par domxaline dans le forum D�buter avec Java
    R�ponses: 2
    Dernier message: 17/05/2010, 18h34
  2. Question sur Thread::Sleep()
    Par Ren97 dans le forum VC++ .NET
    R�ponses: 3
    Dernier message: 18/09/2009, 13h37
  3. Questions sur thread-safe
    Par cdrc78 dans le forum Struts 1
    R�ponses: 1
    Dernier message: 19/01/2007, 11h16
  4. une question sur thread
    Par LN(a) dans le forum Delphi
    R�ponses: 5
    Dernier message: 04/09/2006, 11h32
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    R�ponses: 5
    Dernier message: 13/06/2003, 13h59

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