threads et fonctions membres / visual C++

threads et fonctions membres / visual C++ - C++ - Programmation

Marsh Posté le 25-01-2005 à 18:33:11    

Bonjour,
 
J'essaye de lancer une thread a l'aide de la fonction CreateThread de Windows :
 

Code :
  1. WINBASEAPIHANDLEWINAPI CreateThread(
  2.     LPSECURITY_ATTRIBUTES lpThreadAttributes,
  3.     DWORD dwStackSize,
  4.     LPTHREAD_START_ROUTINE lpStartAddress,
  5.     LPVOID lpParameter,
  6.     DWORD dwCreationFlags,
  7.     LPDWORD lpThreadId
  8.     );


 
C'est chiant tou ce blabla mais je dois passer un pointeur de fonction pour lpStartAddress.
 
Tout se passe bien pour le passage d'un pointeur de fonction classique mais je suis dans une classe et j'aimerais bien utiliser une fonction membre comme parametre du CreateThread.
 
J'ai seulement reussi a passer la fonction appelée lorsqu'elle etait definie comme statique mais je perd tout l'interet de l'acces aux données d'instance.
 
Est-ce possible ? Est-ce que ca rime a rien (voire debile) ?
 

Reply

Marsh Posté le 25-01-2005 à 18:33:11   

Reply

Marsh Posté le 25-01-2005 à 18:36:58    

De mémoire tu peux lui passer effectivement qu'un pointeur sur une fonction statique, mais il suffit de lui passer en argument "lpParameter" this, et là tu peux appeler la fonction de ta classe

Reply

Marsh Posté le 25-01-2005 à 19:19:24    

Merci pour la reponse mais c'est un peu porc, il est ou l'interet d'avoir une fonction statique ?
 
Est-ce quelqu'un connait la raison pour laquelle c'est interdit sinon ?

Reply

Marsh Posté le 25-01-2005 à 19:23:40    

vi, c'est une fonction type callback, donc prédéfini, ça ne peut pas être une fonction membre ...
Recherche des infos les pointeurs de fonction membre ...
super trivial ... ;)

Reply

Marsh Posté le 25-01-2005 à 19:27:42    

tu parles de la fonction que je suis sensé envoyer a createthread ?

Reply

Marsh Posté le 25-01-2005 à 19:33:10    

ok, je pense avoir capté un truc ;)
 
j'ai lu ca sur les fonctions de callback  
[url] http://www.function-pointer.org/zip/f_fpt.pdf [/url]
 
donc ma fonction devrait obligatoirement etre de ce modele ?

Reply

Marsh Posté le 25-01-2005 à 19:35:11    

bon, j'essaye et je vous tient au courant :)

Reply

Marsh Posté le 25-01-2005 à 19:36:37    

Oui, je comprends que ça puisse paraitre "porc", mais on ne peut pas faire autrement.
A mon avis les pointeurs sur fonction membre n'ont pas été bien pensé au depart ...

Reply

Marsh Posté le 25-01-2005 à 19:56:46    

hmmm et BOOST alors :o ???

Reply

Marsh Posté le 25-01-2005 à 19:58:15    

on peut regarder ici pour un bon exemple : http://c.developpez.com/faq/cpp/?p [...] ion_membre

Reply

Marsh Posté le 25-01-2005 à 19:58:15   

Reply

Marsh Posté le 25-01-2005 à 19:58:59    

BOOST ?
???

Reply

Marsh Posté le 25-01-2005 à 20:00:06    

Reply

Marsh Posté le 25-01-2005 à 20:01:21    

JoelF> je te renvoie au lien que tu avais donné :
http://www.codeproject.com/cpp/SoloGenericCallBack.asp
 
dans le topic désopilant de ChrisBK:
http://forum.hardware.fr/hardwaref [...] 0082-1.htm
 
En l'occurence, passer un functor de boost à un appel système de Windows, je suis pas sûr que ça se fasse facilement...
 
edit: Ah, tu veux dire, passer par les libs threads de boost ? Bonne idée...


Message édité par Lam's le 25-01-2005 à 20:02:02
Reply

Marsh Posté le 25-01-2005 à 20:03:05    

Lam's a écrit :


Ah, tu veux dire, passer par les libs threads de boost ? Bonne idée...


 
 
voila :)

Reply

Marsh Posté le 25-01-2005 à 21:42:05    

Boost ou pas, c'est du bricolage je trouve ...

Reply

Marsh Posté le 25-01-2005 à 22:13:04    

Cricri_ a écrit :

Boost ou pas, c'est du bricolage je trouve ...


pardon o_O

Reply

Marsh Posté le 27-01-2005 à 19:50:25    

Je parle des pointeurs sur fonction membre, perso je trouve ça infame, maintenant j'avoue ne pas avoir regardé boost, mais je doute que ça resolve simplement les problèmes ;)

Reply

Marsh Posté le 27-01-2005 à 22:49:37    

Si ca les resout croit moi ^^

Reply

Marsh Posté le 28-01-2005 à 08:31:21    

Ok, je regarderai ça ;)

Reply

Sujets relatifs:

Leave a Replay

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