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 :
- void CMiMainView::OnConnectButtonClicked()
- {
- HANDLE hThread;
- DWORD dwThreadId;
- DWORD dwThreadParam = 1 ;
- DWORD WINAPI ThreadProc(LPVOID lpParameter);
- hThread = CreateThread ( NULL, NULL, ThreadProc, &dwThreadParam, 0, &dwThreadId );
- return;
- }
|
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 :
- void CMiMainView::OnConnectButtonClicked()
- {
- HANDLE hThread;
- DWORD dwThreadId;
- DWORD dwThreadParam = 1 ;
- hThread = CreateThread ( NULL, NULL, CMiMainView::SendPackets, &dwThreadParam, 0, &dwThreadId );
-
- return;
- }
|
J'ai une erreur à la compilation me disant qu'il manque des arguments pour la fonction CMiMainView::SendPackets...
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