Probleme de Thread... :(

Probleme de Thread... :( - C++ - Programmation

Marsh Posté le 07-02-2005 à 21:26:00    

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

Reply

Marsh Posté le 07-02-2005 à 21:26:00   

Reply

Marsh Posté le 07-02-2005 à 21:53:03    

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)
Reply

Marsh Posté le 07-02-2005 à 22:02:46    

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

Reply

Marsh Posté le 07-02-2005 à 22:10:19    

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 08-02-2005 à 13:15:29    

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 )-
Reply

Marsh Posté le 08-02-2005 à 16:46:04    

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...            

Reply

Marsh Posté le 08-02-2005 à 21:25:33    

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'

Reply

Marsh Posté le 09-02-2005 à 10:49:42    

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 )-
Reply

Marsh Posté le 11-02-2005 à 17:06:18    

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.

Reply

Marsh Posté le 11-02-2005 à 17:44:32    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed