2 votes

Comment atténuer les désagréments d'une fenêtre occupée mais peu réactive ?

Je fais beaucoup de simulations dans Matlab sous Windows XP. En général, j'ai toujours un Matlab ouvert qui exécute une longue simulation pendant que je travaille dans une autre instance.

Il y a quelques désagréments. Si je clique accidentellement sur le nom de la fenêtre "de travail" dans la barre des tâches, elle restera marquée en jaune pour toujours (une heure environ) et si je clique accidentellement avec le bouton droit de la souris sur cette fenêtre, un menu contextuel s'affichera, mais ne disparaîtra jamais. Couvrir d'autres fenêtres - très ennuyeux.

Je me demande s'il existe des astuces pour faire disparaître un tel menu contextuel sans tuer mon calcul.

En gros, ça va ressembler à ça pour toujours : exemplary screen

Jusqu'à présent, j'ai appris que si je mets un peu de wait(0.1) dans mon code, cela empêchera cela, mais ralentira aussi horriblement mes calculs. C'est pourquoi je ne la considère pas comme une option.

1voto

diegogs Points 624

Je suppose que, par défaut, Matlab exécute votre simulation sur le fil de l'interface utilisateur. Ainsi, pendant que vous simulez, vous n'avez pas le temps de gérer quoi que ce soit en rapport avec l'interface utilisateur.

Pour contourner ce problème, vous devez demander à Matlab d'exécuter vos simulations sur un nouveau fil. J'ai trouvé des informations à ce sujet sur SO :

Les informations trouvées sur Google semblent également pointer dans la direction de la Boîte à outils pour le calcul parallèle .

0 votes

Bonne référence ! Je ne comprends pas pourquoi - mais juste après avoir appelé matlabpool, l'interface utilisateur est restée réactive. J'espère que ça restera comme ça :)

0voto

LawrenceC Points 70381

Il s'agit essentiellement d'un sous-produit de la conception de Windows - les applications reçoivent des "messages" en réponse aux événements de l'interface utilisateur et c'est à l'application de faire des choses comme repeindre sa fenêtre, la redimensionner, etc.

Windows enverra à l'application les "messages" appropriés en réponse à des événements tels que des clics sur l'interface utilisateur, etc., mais l'application est autorisée à les ignorer complètement, ce qui est généralement le cas des applications mal conçues/portées.

Une application conçue pour donner l'impression d'être interactive A) interrompra ce qu'elle est en train de faire à différents moments pour traiter ces messages, ou B) aura un fil d'exécution distinct qui effectuera le travail réel. Je peux comprendre que le "sentiment d'interactivité" ne soit pas la priorité de conception de certaines applications, et si l'application est en fait un environnement de développement pour exécuter vos propres programmes, alors la responsabilité du "sentiment d'interactivité" vous incombe. J'ai joué avec Visual Studio et l'exécution de programmes qui créent accidentellement des boucles sans fin, ce qui fait grimper l'utilisation du processeur de l'application jusqu'à 100% et provoque des effets similaires sur l'interface utilisateur.

Je ne me souviens plus du nom de ces programmes, mais il en existe qui vous permettent de faire le truc des "espaces de travail multiples", comme c'est le cas sur de nombreux bureaux Linux. Si vous pouvez placer vos instances de MATLAB dans des espaces de travail distincts à l'aide d'un tel programme, cela pourrait vous éviter de cliquer accidentellement dessus.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X