Bonsoir,

j'ai un probleme avec le morceau de code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
	ThreadWaitClients main_thread;
		main_thread.run(0);
Si je le place dans un bloc indépendant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
{
		ThreadWaitClients main_thread;
		main_thread.run(0);
	}
j'obtiens l'erreur de runtime énoncée dans le titre du topic.
Voici les définitions interressantes:
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
class ThreadWrapper
{
	bool _launched;
	HANDLE _hd;
	DWORD _id;
	void *_args;
	static DWORD WINAPI launch(LPVOID param);
	virtual void exec(void *args) = 0;
 
public:
	ThreadWrapper();
	virtual ~ThreadWrapper();
	void run(void *args);
};
 
ThreadWrapper::ThreadWrapper()
	: _launched(false)
{
}
 
 
ThreadWrapper::~ThreadWrapper()
{
	if (_launched)
		CloseHandle(_hd);
}
 
 
void ThreadWrapper::run(void *args)
{
	_args = args;
	_hd = CreateThread(NULL, 0, launch, this, 0, &_id);
	_launched = true;
}
 
 
DWORD WINAPI ThreadWrapper::launch(LPVOID param)
{
	ThreadWrapper *this_thread = (ThreadWrapper *)param;
	this_thread->exec(this_thread->_args);
	return 0;
}
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
class ThreadWaitClients : public ThreadWrapper
{
	void exec(void *args);
 
public:
	ThreadWaitClients();
	~ThreadWaitClients();
};
 
void ThreadWaitClients::exec(void *args)
{
	cout << "hello from thread waiting for clients" << endl;
}
lorsque le code de départ est dans un bloc indépendant (et uniquement dans ce cas),
Code : Sélectionner tout - Visualiser dans une fenêtre à part
this_thread->exec(this_thread->_args);
appelle la méthode virtuelle pure de la classe ThreadWrapper!
Quelqu'un pourrait m'expliquer pourquoi?
Comme d'hab, merci d'avance pour votre aide précieuse =)