Bonjour à tous,
j'essaie de résoudre un problème de freeze en utilisant un timer dans une thread. J'ai donc une thread 'ThreadListen' (qui est une fonction membre 'static' de ma classe CMonObjet), et j'essaie de lancer un timer (que j'ai déclaré comme fonction 'libre', non membre de ma classe CMonObjet) dans cette thread:
et le .cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //MonObjet .h void CALLBACK TimerCallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2); class CMonObjet { ... protected: static UINT ThreadListen(LPVOID lpvParam); };
Et j'ai 2 problèmes que je ne parviens pas à résoudre:
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 // MonObjet.cpp UINT CMonObjet::ThreadListen(LPVOID lpvParam) { CMonObjet* monObjet = (CMonObjet*) lpvParam; monObjet ->SetTimerId(timeSetEvent(monObjet ->GetTimerDelay(), 200, TimerCallback, (DWORD) monObjet , TIME_ONESHOT|TIME_CALLBACK_FUNCTION)); ReadFile(monObjet ->GetPortHandle(), &oRxByte, 1, &dwNbBytesRead, NULL); timeKillEvent((UINT) monObjet ->GetTimerId()); } //et la callback: void CALLBACK TimerCallback(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) { CMonObjet* monObjet = (CMonObjet*) dwUser; DWORD dwExitCode; GetExitCodeThread(monObjet ->GetThreadHandle(), &dwExitCode); TerminateThread(monObjet ->GetThreadHandle(), dwExitCode); AfxMessageBox("thread killed"); }
1/ j'ai 2 casts qui génèrent les 2 warnings suivants:
troncation de pointeur de 'CMonObjet*' à 'DWORD' (ligne timeSetEvent())
et 'cast de type'*: la conversion de 'DWORD' en 'CMonObjet*' d'une taille supérieure (premiere ligne de la callback)
Comment éviter ces warnings?
2/ un problème de link:
error LNK2019: symbole externe non résolu __imp__timeKillEvent@4 référencé dans la fonction "protected: static unsigned int __cdecl CMonObjet::ThreadListen(void *)" (?ThreadListen@CMonObjet@@KAIPAX@Z)
je ne comprends pas cette erreur. Quelqu'un pourrait me donner quelques explications?
Partager