IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

WaitForMultipleObjects dans un thread bloque mon application


Sujet :

WinDev

  1. #1
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut WaitForMultipleObjects dans un thread bloque mon application
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ThreadExécute("evts", threadNormal, HandleMSAPIEvents)
    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
    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
    [...]
    Alors ici, avec WD14, tout se passe très bien, on continue le traitement et toute l'application se passe à merveille.
    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 !

  2. #2
    Membre actif Avatar de peijnoob
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 279
    Points : 294
    Points
    294
    Par défaut
    Bon bah j'ai rien dit, finalement, après un redémarrage de l'application qui hoste l'API, ça fonctionne, je suis un peu perplexe.

    Désolé pour le dérangement

Discussions similaires

  1. Dessiner dans une fenêtre externe à mon application
    Par fatdarron dans le forum Langage
    Réponses: 6
    Dernier message: 15/03/2010, 15h13
  2. Réponses: 5
    Dernier message: 28/04/2009, 16h55
  3. Exporter JAR google dans le Jar de mon application
    Par ddyhia dans le forum Général Java
    Réponses: 6
    Dernier message: 06/03/2009, 16h36
  4. Réponses: 0
    Dernier message: 09/12/2008, 10h30
  5. Réponses: 3
    Dernier message: 09/07/2008, 10h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo