Bonsoir,
j'ai un probleme avec le morceau de code suivant:
Si je le place dans un bloc indépendant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ThreadWaitClients main_thread; main_thread.run(0);
j'obtiens l'erreur de runtime énoncée dans le titre du topic.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 { ThreadWaitClients main_thread; main_thread.run(0); }
Voici les définitions interressantes:
et
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; }
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
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; }appelle la méthode virtuelle pure de la classe ThreadWrapper!
Code : Sélectionner tout - Visualiser dans une fenêtre à part this_thread->exec(this_thread->_args);
Quelqu'un pourrait m'expliquer pourquoi?
Comme d'hab, merci d'avance pour votre aide précieuse =)
Partager