Bonjour
je rencontre un pb que je n'arrive pas a elucider ...
J'ai la hiearchie de classe suivante:
Classes abstraites
et une classe concrete qui effectue un calcul un peu long ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 class IComputerSuper { public: IComputerSuper() : m_pThread(0) { }; virtual ~IComputerSuper() { if (m_pThread) delete m_pThread; }; // TODO : dois-je le faire ? virtual UINT Proceed() =0 { return false;}; virtual bool Start() { m_Status = ERR; if (m_pWnd == NULL) { LOGERR("Notification window no set"); return false; } m_pThread = AfxBeginThread(ThreadFunc,this); if (m_pThread) LOGERR("Thread creation failed"); return (m_pThread != NULL); } protected: static UINT ThreadFunc(LPVOID pParam) { IComputerSuper *l_pComp = reinterpret_cast<IComputerSuper *>(pParam); if (l_pComp) { if (l_pComp->Proceed()) return 0; } return 1; }; }; template <typename VALUE1, typename VALUE2> class IComputer : public IComputerSuper { // rien que des méthodes et des données d'interface ici ... };
Voici les pb que je rencontre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 class CConcreteComputer : protected IComputer<BYTE,WORD> { public : CConcreteComputer() : IComputer() { }; virtual ~CConcreteComputer() { }; virtual bool Proceed() { // fait les calculs..... }; };
1) dans la classe concrete, la ligne qui lance le thread (AfxBeginThread) genere des erreurs de compil. D'apres le message et la msdn, il ne reconnait pas la signature de la fonction.
L'erreur classique est que la fonction (ThreadFunc dans mon cas) n'est pas static our moi, elle l'est !
Ppur contourner le pb, j'ai réécrit la ligne AfxBeginThread comme ceci
Ce qui passe a la compil mais ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 AfxBeginThred((AFX_THREADPROC)(ThreadFunc),this);
2) mon thread n'est pas lancé ...
J'ai fait un petit programme de test avec les memes considerations (classe abstraite) et ca marche correctement ...
La seule différence est la présence dans le cas présenté ici qu'il y a une classe abstraite générique intermediaire ... Est-ce que ca peut venir de là ?
Je doute ...
Si quelqu'un a une idée ou voit une c....e évidente, merci de m'aider ...
V
Partager