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é
    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
    Membre expert
    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

###raw>template_hook.ano_emploi###