Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1552 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme de Thread... :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de Thread... :(

n°974784
Lord_VKing
Posté le 07-02-2005 à 21:26:00  profilanswer
 

Bonjours, je suis débutant en C++ et j'essaye de faire un thread, mais j'arrive pas à lui passer de paramêtre... voila je m'explique;
 
j'ai une classe CNom ... et un objet oNom... et un thread à qui j'aimerais envoyé mon oNom en paramêtre....
 
 
DWORD WINAPI Affichage( LPVOID lpParam )
 
int main()
{
CNom oNom;
 
...
 
DWORD dwThreadId, dwThrdParam = 5;  
HANDLE hThread;
hThread = CreateThread(    
          NULL,0,Affichage,&dwThrdParam,0,&dwThreadId);
//en fait c'est ce que j'ai pu trouvé sur le net... :/
 
...
}
 
                 
Alors je voudrais envoyer le oNom au thread.. :/ ce doit pas être bien complexe, mais j'commence avec les thread :S

mood
Publicité
Posté le 07-02-2005 à 21:26:00  profilanswer
 

n°974834
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2005 à 21:53:03  profilanswer
 

Faudrait voir à ne pas reproduire bêtement les exemples de la MSDN hein... Le code que tu fournis est tiré d'un exemple de la MSDN sur la création des threads. Les variables dwThrdParam et dwThreadId ne veulent dire quelque chose que pour cet exemple :sarcastic:
 
Si tu lis la description de la fonction CreateThread :

Citation :


HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  SIZE_T dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId
);


Et si tu lis la description du paramètre lpParameter :

Citation :


lpParameter  
[in] Pointer to a variable to be passed to the thread.  


 
Vois tu la lumière ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°974858
Lord_VKing
Posté le 07-02-2005 à 22:02:46  profilanswer
 

Oui, ca je l'ai lu t'inquiète, mais je pige pas comment je peut pointer sur mon oNom... dois-je spécifié que c'est du type CNom ? j'ai lu que c'était la mon paramètre... mais comment le mettre j'voudrais simplement la ligne de code à mettre, à partir de la il me serais plus facile de comprendre comment ca fonctionne...
 
//comment je fait ma déclaration ???
 
DWORD WINAPI Affichage( LPVOID *oNom )
//et ma definition
 
j'ai d'la misère un peu à piger, tu me serais d'une plus grande aide en m'indiquant directement comment le faire...  
 
Mais merci de la lumière

n°974863
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 07-02-2005 à 22:10:19  profilanswer
 

tu pointes sur ton oNom en rajoutant l'opérateur "&" devant


---------------
J'ai un string dans l'array (Paris Hilton)
n°975315
blackgodde​ss
vive le troll !
Posté le 08-02-2005 à 13:15:29  profilanswer
 

il est conseillé d'utiliser des allocations dynamiques pour passer des objets à des threads ... ca devient vite un casse tête de validité des objets sinon.
 
attention à la gestion du multihtreadind avec les Critical Section par exemple.


---------------
-( BlackGoddess )-
n°975606
Lord_VKing
Posté le 08-02-2005 à 16:46:04  profilanswer
 

Bon j'essaye de faire mon pointeur, mais la cela ne fonctionne pas... dans ma déclaration, j'fait comment...  ???
 
DWORD WINAPI Affichage( LPVOID oNom);
 
HANDLE hThread;
hThread = CreateThread(  
       NULL,0,Affichage,&oNom,0,&dwThreadId);    
 
Si tu pourrais me donner la synthaxe exacte et me l'expliquer, se serais très apprécier...            

n°975826
Lord_VKing
Posté le 08-02-2005 à 21:25:33  profilanswer
 

Quand je tente de changer le LPVOID dans la déclaration, pour CNon oNom, il me donne un erreur dans mon CreateThread(...) il me dit :::Impossible de convertir le parametre 3 'DWORD (CNom)' en 'LPTHREAD_START_ROUTINE'

n°976192
blackgodde​ss
vive le troll !
Posté le 09-02-2005 à 10:49:42  profilanswer
 

euh ... je vois pas d'autre méthode que le cast ...
 

Code :
  1. DWORD WINAPI ThreadEntry(LPVOID param)
  2. {
  3.   Class *obj = reinterpret_cast<Class *>(param);
  4.   ...
  5. }
  6. void f()
  7. {
  8.   Class *obj;
  9.   ...
  10.   DWORD ThreadId;
  11.   HANDLE hThread = CreateThread(NULL, 0, ThreadEntry, obj, 0, &ThreadId);
  12.   ...
  13.   CloseHandle(hThread);
  14. }


---------------
-( BlackGoddess )-
n°979001
Lord_VKing
Posté le 11-02-2005 à 17:06:18  profilanswer
 

Merci pour la reponse, là il ne détecte aucune erreur, mais je ne peut plus utiliser mon objet ... Partout ou j'utilisait l'objet (oNom.SetNom(...)) il me dit que la partie de gauche na pas de struct,class,union... Dois-je modifier la synthaxe ou j'utilise mon objet ?!?! vu que j'ai modifier ca déclaration... (CNom *oNom;)...  
 
Merci d'avance pour une future réponse.

n°979036
Joel F
Real men use unique_ptr
Posté le 11-02-2005 à 17:44:32  profilanswer
 

oNom->SetNom() .... c'est quand même la base :sarcastic:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme de Thread... :(

 

Sujets relatifs
Problème PHP/Javascript[Coppermine] Probleme d'installe
problème execution programme C sous windowsProblème Thread en java
[JAVA]Probleme de Thread[thread/linux/c++/kdevelop3.1] Problème avec les threads
Probleme Thread Posix + C++[Applet JAVA] Problème de thread qui ne rend pas la main
[JAVA] probleme de threadProbleme de Thread avec Linux
Plus de sujets relatifs à : Probleme de Thread... :(


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR