Bonjour à tous.
Après avoir passé une de mes applis de WD14 à WD15, j'ai un souci, qui n'apparaissait pas dans la 14.
Cette application est iconisée dans le systray et discute avec une API qui nous transmet son état via des évènements Windows.
Dans la fenêtre principale, je lance un thread qui sera chargé d'attendre ces évènements :
Dans le code de ce thread, nous attendons un premier évènement d'initialisation, qui arrive normalement très vite :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ThreadExécute("evts", threadNormal, HandleMSAPIEvents)
Alors ici, avec WD14, tout se passe très bien, on continue le traitement et toute l'application se passe à merveille.
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 Trace("début écoute évènements.") nRes est un entier HandlesNotify est un tableau de 2 entiers bNotifyAEventSet est un booléen dwWaitResult est un entier sur 8 octets CurState est un entier = API_ERROR PrevState est un entier = API_ERROR NotifyEventName est une chaîne CreerEvenement(API_NOTIFY_A, Vrai, HandlesNotify, 1) CreerEvenement(API_NOTIFY_B, Vrai, HandlesNotify, 2) Trace("Les evts ont été créés, début attente du 1er évènement.") SI cGlobalData::Lit_gbEcouteEvts() ALORS bNotifyBEventSet est un booléen dwWaitResult = API("Kernel32.dll", "WaitForMultipleObjects", 2, &HandlesNotify, False, Infini) Trace("1er évènement reçu. Résultat : " + dwWaitResult) bNotifyAEventSet = Faux SI (WAIT_OBJECT_0 = dwWaitResult) ALORS bNotifyAEventSet = Vrai FIN bNotifyBEventSet = Faux SI (WAIT_OBJECT_0 + 1 = dwWaitResult) ALORS bNotifyBEventSet = Vrai FIN SI ( bNotifyAEventSet OU bNotifyBEventSet ) ALORS NotifyEventName = bNotifyAEventSet ? API_NOTIFY_A SINON API_NOTIFY_B CheckStateChange(CurState, PrevState) SINON Decharge() FinProgramme(Faux) FIN FIN //Boucle d'écoute des évènements [...]
Dans WD15, l'application bloque complètement lors de l'appel du WaitForMultipleObjects (pas seulement le thread, mais l'application complète, je ne peux même pas la quitter via le menu de l'application, obligé de forcer l'arrêt du test).
Je tenais juste à signaler que cette portion de code a été adaptée d'un exemple en C fourni avec le SDK de l'API en question.
Quelqu'un a une idée du pourquoi du comment ça fonctionne plus en WD15 ?
Merci !
Partager