Bonjour,
Est ce que vous avez une idée sur comment définir un timeout pour la fonction input, càd, si l'utilisateur au bout de 5 secondes, par exemple, n'introduit aucune entrée, la fonction input s’arrête.
Version imprimable
Bonjour,
Est ce que vous avez une idée sur comment définir un timeout pour la fonction input, càd, si l'utilisateur au bout de 5 secondes, par exemple, n'introduit aucune entrée, la fonction input s’arrête.
Je ne maitrise pas vraiement le sujet mais il me semble qu'il existe une fonction timer permettant de faire cela.
Je ne sais pas si c'est possible mais ça m'intéresse de savoir si cela fonctionne ;)Code:doc timer
Merci,
J'ai déjà essayé ça mais ça marche pas :aie:
Il est effectivement possible d'utiliser la fonction timer.
Essayes avec ce code la :
A voir si dans l'utilisation que tu veux en faire, cela peut fonctionnerCode:
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 function varargout = timeoutDlg(dlg, delai, varargin) % dlg : fonction de dialogue (ex:@inputdlg) % delai : temps avant la fermeture de la boite de dialogue en secondes % varargin : arguments de la fonction de dialogue % Récuperation des figures f1 = findall(0, 'Type', 'figures'); % Configuration du timer t = timer('TimerFcn', {@closedlg f1}, 'StartDelay', delai); start(t); % Fonction de dialogue Valeurs = dlg(varargin{:}); if numel(Valeurs) == nargout varargout = Valeurs(:); else varargout = cell(1, nargout); end % Suppression du timer if strcmp(t.Running, 'on') stop(t); end delete(t); function closedlg(src, event, f1) disp('Temps écoulé'); % Récupération des figures f2 = findall(0, 'Type', 'figure'); fnew = setdiff(f2, f1); if ishandle(fnew); close(fnew); end
Merci, J'ai essayé avec ce code, mais ça marche pas :aie::
Je pense que ça concerne des objets type figure, dans ce cas vaut mieux utiliser uiwaitCode:timeoutDlg(@input, 2, 'Entrer votre nom')
C'est effictivement appliqué aux objets de type figure (inputdlg questdlg...)
Si tu ne veux pas ce type d'objet il suffit d'arranger les fonctions pour cela
C'est impossible à réaliser avec la fonction input() !
Ce que tu cherches: waitinput ;)
j'ai essayé avant d'utiliser la fonction timer, mais j'ai pas réussi à faire ce que je veux. Je regarderai ça de nouveau.
Eventuellement en combinant matlab + quelque chose d'autre ce sera possible.Citation:
J'ai des pistes avec des commandes système, mais je suis pas encore sûr.
Mais c'est important de savoir que par nature matlab est "single thread" donc ne peut gérer qu'un seul fil d'exécution!
Le seul moyen de créer un input avec un timeout est d'utiliser un GUI Matlab qui peut gérer des évènements asynchrones (ex: j'appuie sur la touche A, j'attend 3 secondes...). La solution proposée avec waitinput n'est donc pas très propre mais c'est la seule qui peut être effectuée en utilisant uniquement matlab.
Le Command Window de MATLAB est codé en Java… il faut peut être explorer cette voie.