MFC & Threads problème de compréhension

MFC & Threads problème de compréhension - C++ - Programmation

Marsh Posté le 22-04-2009 à 20:10:52    

Bonjour,
 
Je programme une MFC, ou j'ai besoin d'implémenter plusieurs threads, je comprend leur fonctionnement mais je croix qu'un aspect du C++ m'échappe, je m'explique:
 
Voici le cas ou cela marche parfaitement, c'est à dire une fonction simple, lancer par CreateThread:

Code :
  1. void CMiMainView::OnConnectButtonClicked()
  2. {
  3. HANDLE hThread;
  4. DWORD dwThreadId;
  5. DWORD dwThreadParam = 1 ;
  6. DWORD WINAPI ThreadProc(LPVOID lpParameter);
  7. hThread = CreateThread ( NULL, NULL, ThreadProc, &dwThreadParam, 0, &dwThreadId );
  8.        return;
  9. }


 
Comme on peut le voir c'est une fonction membre de la classe CMiMainView  qui lance une fonction simple ThreadProc dans un thread.
Si maintenant au lieu de lancer une fonction simple je veux lancer une autre fonction membre de la même classe:  
 
DWORD WINAPI CMiMainView::SendPackets(LPVOID lpParameter)
 

Code :
  1. void CMiMainView::OnConnectButtonClicked()
  2. {
  3. HANDLE hThread;
  4. DWORD dwThreadId;
  5. DWORD dwThreadParam = 1 ;
  6. hThread = CreateThread ( NULL, NULL, CMiMainView::SendPackets, &dwThreadParam, 0, &dwThreadId );
  7.      
  8.        return;
  9. }


 
J'ai une erreur à la compilation me disant qu'il manque des arguments pour la fonction CMiMainView::SendPackets... :pfff:  
 
Après quelques recherches j'ai cru comprendre qu'il fallait déclarer cette fonction membre 'static', mais comme elle fait appel a plusieurs autres fonctions membres de la classe CMiMainView cela me pose problème car je n'y aurait plus accès.
 
J'ai trouver quelques briques d'explications sur developpez.com http://cpp.developpez.com/faq/vc/? [...] rkerThread mais je ne comprend pas vraiment...
 
Ma question est donc :
 
Comment puis-je m'y prendre pour lancer un thread d'un fonction membre dans une autre fonction membre de la même classe ?
 
Je suis débutant en C++, je développe sous visual studio 2005 sur un XP Pro


Message édité par gaellm le 22-04-2009 à 20:13:39
Reply

Marsh Posté le 22-04-2009 à 20:10:52   

Reply

Marsh Posté le 22-04-2009 à 21:06:03    

si la classe A a une methode prenant un void* et renvoyant un void*, sa signature est :
 
void* A::*(void*)
 
notez comment le type de la classe intervient dans la signature.  
Or les PAI C de threading windows attendent certainement un void*(void*) quie st incomaptible. Donc soit tu passe par une methode statiqeu soit t'es baissé.  
 
utilise donc plutot Boost.Thread

Reply

Marsh Posté le 22-04-2009 à 22:36:32    

Daccord je vais me renseigner sur Boost.Thread, merci de tas réponse.
 

Reply

Marsh Posté le 23-04-2009 à 09:47:04    

Je viens de regarder Boost.Thread mais ca fait appel a une installation tiers, ce dont je ne peut pas me permettre.
 
J'ai donc passé toute mes fonctions membres en fonction simple.
 
Il y a t'il moyen pour un fonction simple d'accéder a un objet d'une class ?
 
je voudrais par exemple ecrir dans un rich text de ma fenetre MFC. Je doit donc accéder a CMiMainView::RichText1.AppendText("test" );

Reply

Marsh Posté le 23-04-2009 à 10:55:03    

bah tu passe le *this de ton objet en parametre à ton thread

Reply

Sujets relatifs:

Leave a Replay

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