begin process at 2012 02 11 05:59:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

Pointeur sur methode, template, etc...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Pointeur sur methode, template, etc...

lundi 1 juin 2009 à 17:12:56 | Pointeur sur methode, template, etc...

sheorogath

Membre Club Administrateur CodeS-SourceS
Bonjour, Mon probleme est un peu particulier, je voudrais lancer un Thread sur un methode de classe: pour se faire j'ai fait une fonction de ce genre: [CODE] template void thread_callback(std::pair *pair) { K i = pair->first; K p = pair->second; i->*p(); } [/CODE] et je voudrais l'appeler de cette maniere; [CODE] std::pair *p = new std::pair(this->sock, ZSocket::*startSelect); this->thread = Thread::createThread(thread_callback, p); [/CODE] Mais ca ne marche pas ... Meme la paire ne compile pas ... Si vous aviez des infos, des liens ou meme la solution ca m'aiderait :) Merci d'avance Sortie du compilateur (VC9): [CODE] :\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(36) : error C2059: syntax error : '::*' c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(38) : error C2065: 'p' : undeclared identifier c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(39) : error C2143: syntax error : missing ';' before '}' c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(42) : error C2143: syntax error : missing ';' before '}' c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(42) : fatal error C1004: unexpected end-of-file found [/CODE]

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
lundi 1 juin 2009 à 17:16:00 | Re : Pointeur sur methode, template, etc...

sheorogath

Membre Club Administrateur CodeS-SourceS
Je reposte:

Bonjour,
Mon probleme est un peu particulier, je voudrais lancer un Thread sur un methode de classe et pour se faire j'ai fait une fonction de ce genre:

template <typename K>
void thread_callback(std::pair<K, K> *pair)
{
K i = pair->first;
K p = pair->second;

i->*p();
}

et je l'appel comme ca:

void ZNetwork::startNetworkThread()
{
std::pair<ZSocket *, ZSocket::*startSelect> *p =
new std::pair(this->sock, ZSocket::*startSelect);
this->thread = Thread::createThread(thread_callback, p);
}

Ma classe Thread lance CreateThread sous windows et pthread_create sous linux

Mais ca ne marche pas ... Meme la paire ne compile pas ... Si vous aviez des infos, des liens ou meme la solution ca m'aiderait bien :)

voila merci d'avance

Sortie du compilateur (vc9):

c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(36) : error C2059: syntax error : '::*'
c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(38) : error C2065: 'p' : undeclared identifier
c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(39) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(42) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\daedric\bureau\zap\src\network\znetwork.cpp(42) : fatal error C1004: unexpected end-of-file found
lundi 1 juin 2009 à 18:09:18 | Re : Pointeur sur methode, template, etc...

sheorogath

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
probleme resolu:

template <typename K, typename L>
#if WIN32
DWORD WINAPI thread_callback(LPVOID param)
#else
void thread_callback(void *param)
#endif
{
std::pair<K, L> *pair = (std::pair<K, L> *)param;
K i = pair->first;
L p = pair->second;

(i->*p)();
#if WIN32
return (0);
#endif
}

void ZNetwork::startNetworkThread()
{

std::pair<ZSocket *, meth> p(this->sock, &ZSocket::startSelect);
this->thread = Thread::createThread(thread_callback<ZSocket *, meth>, &p);
}
lundi 1 juin 2009 à 18:48:38 | Re : Pointeur sur methode, template, etc...

CptPingu

Administrateur CodeS-SourceS
Ton template me parait bizarre. Tu es sûr de vouloir faire un "template <typename K>" et pas un "template <typename K, typename K2>" ?
La pair ne peut avoir le même type dans ses deux paramètres.

Je te propose un petit exemple, qui répondra peut être à ta question:

#include <iostream>
#include <utility>

#define callMemberFunction(object, ptrToMember)  ((object).*(ptrToMember))

class ZSocket
{
public:
  void startSelect()
  {
    std::cout << "kikoo" << std::endl;
  }
};

typedef void (ZSocket::*func) ();

template <typename Object, typename Method>
void thread_callback(std::pair<Object, Method>* pair)
{
  Object obj = pair->first;
  Method met = pair->second;
  (obj.*met)();
}

// Perso je mettrais plutot une reference:
//
// template <typename Object, typename Method>
// void thread_callback(std::pair<Object, Method>& pair)
// {
//   Object obj = pair.first;
//   Method met = pair.second;
//   (obj.*met)();
// }

int main()
{
  ZSocket sock;
  func pFunc = &ZSocket::startSelect;

  (sock.*pFunc)();
  callMemberFunction(sock, pFunc) ();
  std::pair<ZSocket, func> p(sock, pFunc);

  thread_callback(&p);

  return 0;
}

lundi 1 juin 2009 à 18:51:32 | Re : Pointeur sur methode, template, etc...

CptPingu

Administrateur CodeS-SourceS
Oupss, j'avais pas rafraîchit la page... Problème résolu, c'est l'important :p


Cette discussion est classée dans : code, thread, error, documents, pair


Répondre à ce message

Sujets en rapport avec ce message

gotoxy - VC++ 6 [ par BsEtZeOpLhD ] SalutJ'utilise Visual C++ 6, et je n'arrive pas a faire fonctionner gotoxy(). Voici le code que j'utilise :#include #include <b Prob de thread [ par sebastienbro ] Bonjour, j'ai un problème avec des thread, je n'arrive pas a en créer un :(Voici mon code : HANDLE hThread1;DWORD dwThreadId1;DWORD WINAPI T Terminer un thread [ par vecchio56 ] RebonjourJ'ai crée un thread de la manière suivante:HANDLE hThread = CreateThread(0, 0, ThreadProc, &ts, 0, &dwThreadId);et je à propos des threads [ par GUERRIER_ABSOLU ] Salut, je voudrais savoir s'i quelqu'un a déjà essayé d'appeler une fonction dans un thread et a remarqué quelque chose d'innatendu. En fait quand j'a WSAAsyncSelect ... [ par DeAtHCrAsH ] A quel endroit dans mon code dois-je appeller cette fonction ?...WSAAsyncSelect(m_Socket, hDlg, WM_SOCKET, FD_READ | FD_WRITE | FD_CONNECT | FD_CLOSE) parse error dans un fichier .rc ? [ par Jeffray ] Bonjour,Une parse error dans un fichier .rc, j'utilise dev c++ 4.9.8.0.voici le code :IDD_ABOUT DIALOG DISCARDABLE 70, 50, 206, 102STYLE DS_MODALFRA Class & CreateThread [ par Renfield ] Bonjour, j'ai un petit soucis de compilation...dans une classe, je voudrais créer un Thread. ma proc est définie comme cela :LPTHREAD_START_ROUTINE Build Error avec Dev-Cpp + SDL [ par Rouliann ] Salut tout le monde!Alors voila le probleme, g tapé un code tt simple en C++ avec la SDL et le compilateur me dit : C:\Dev-Cpp\...\Makefile.win [Build Lancement thread successif (ordonnés) [ par themaste ] Salut!Voila, j'ai une question d'ordre propreté du code. En fait, j'ai plusieurs thread, et j'aimerais pouvoir les lancés les un après les autres..je fatal error C1075 [ par thetoto52 ] Je suis en train de déveloper un projet en c++ au lycé.Mon projet marchais bien quand j'étais au lycé il me semble et quand je l'ai ramené chez moi et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,685 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales