Bonjour.
Après mes déboires avec Sleep (voir mon topic du 29/10/2013 : Démonstration garantie sans trucage) avec lequel le système dort apparemment trop profondément, je cherche une autre méthode pour attendre "un certain temps".
Le but est d'attendre 1s (a priori) au démarrage du programme pour que certains composants matériels soient correctement reconnus, il s'agit de détecter les périphériques HID type IOWarrior24 à l'aide du composant de R. Marquardt (pour ceux qui connaissent, événement "OnArrival" qui devra reconnaître dans sa routine les circuits de ce type, il peut aussi y avoir une souris et un clavier parmi les HID ...). Normalement, vu le caractère multitâche de Windows, on n'est pas sûr que ces choses se règlent en premier ...
Je définis donc un timer Chrono1 (il y en a un deuxième qui est destiné à servir à autre chose), Enabled avec une valeur de 1000 (ms), je lui associe une routine contenant seulement Chrono1.Enabled:=false (qui est censée l'arrêter au bout d'une seconde) et dans la routine qui est lancée "OnActivate" de la fiche principale (il n'y a d'ailleurs qu'une fiche) je mets l'instruction apparemment innocente :
Repeat until not (Chrono1.Enabled)
croyant que le multitâche n'empêchera pas l'interruption timer de se produire.
Bang ! Mon appli est réduite (à l'exécution) sur la barre des tâches et je ne peux plus l'arrêter que par la commande réinitialiser dans Delphi ou la prise des 3 doigts (gestionnaire de tâches) dans l'environnement Windows.
Le multitâche de Windows ne serait-il vrai que quand il peut embêter (je reste poli! ) les développeurs ? Loi de Murphy ?
Que faire ? Evidemment une solution serait de déclencher cette même routine d'initialisation, au lieu du "On Activate", par ledit timer Chrono1 au bout d'une seconde, et de mettre le programme dans un état d'attente lors du démarrage avec des indicateurs appropriés qui seraient testés par les autres routines événementielles, mais cela ne m'explique pas pourquoi une instruction au fond anodine et sans problème apparent m'envoie dans le "Walhalla" ...
Merci d'avance ...
Partager