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

  1. #1
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : août 2009
    Messages : 641
    Points : 849
    Points
    849
    Par défaut Utilité de DRAWNOW dans les fonctions de fermeture des fenêtres d'application multi-fenêtres
    Bonjour,
    suite à un problème rencontré je poste ce message.
    L'idée est que la fermeture d'une fenêtre peut prendre un certain temps et empêcher la bonne exécution de fonctions qui devraient s'exécuter ensuite (en supposant l'appel d'une fenêtre suivi de l'attente d'une réponse).
    Le cas précis dans lequel j'ai rencontré ce problème est le suivant :
    lors de l'exécution du programme une nouvelle fenêtre peut être ouverte (par exemple demande de validation d'action). Une fois la réponse de l'utilisateur obtenue (clic sur OK), la fenêtre se ferme et le programme doit envoyer des données via le port série. Problème : pour quelques-unes des premières trames Matlab renvoie un 'Timeout' (normalement Matlab attend une réponse dans les 5s mais ne la voit pas).
    Ce problème est éliminé en forçant le raffraîchissement graphique dans la fonction de fermeture ou avant l'envoi de trames ou à tout autre endroit adéquat.
    ex dans le callback d'un bouton de validation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    delete(gcbf);
        drawnow;
    ou dans le programme principal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    choice = questdlg('Are you sure you want to delete the profile?', ...
            'Delete Profile', 'Yes', 'No', 'No');
        drawnow;
    Je suppose que cela peut poser problème dans d'autres cas de figure c'est pourquoi je poste ici.
    Si quelqu'un sait exactement ce que fait Matlab lors de la fermeture d'une fenêtre ou à des remarques à faire sur les problèmes de raffraîchissement graphiques, elles sont les bienvenues.

  2. #2
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    Tout est résumé dans cette note technique:
    How do I set up a uicontrol callback to interrupt a routine? et explique pourquoi drawnow résout ce type de problème.
    Et c'est là que la propriété "Interruptible" des callbacks devient intéressante pour gérer les priorités des actions.
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

Discussions similaires

  1. utilité de __fastcall dans les fonctions?
    Par sat83 dans le forum C++Builder
    Réponses: 14
    Dernier message: 14/05/2012, 11h39
  2. [FLASH 8] Ciblage dans les fonctions
    Par abenhass dans le forum Flash
    Réponses: 2
    Dernier message: 14/12/2005, 15h00
  3. "_" dans les fonctions
    Par reggae dans le forum C
    Réponses: 3
    Dernier message: 30/09/2005, 20h08
  4. Réponses: 2
    Dernier message: 07/10/2004, 18h00
  5. [plpgsql] transaction dans les fonctions ?
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 27/06/2004, 17h56

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