Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de freeze

2 réponses
Avatar
Sébastien
Bonjour,

Débutant relatif (je bidouillais en vb6, je suis passé à vb.net), je suis en
train de buter sur une appli qui freeze.

C'estune appli qui va commander une sorte de metit automate. L'appli se
contente de générer un mot binaire "1001010110" qui, envoyé vie un port
quelconque, commandera le démarrage (1) ou l'arret (0) des moteurs.
L'appli se contente de modifier certains bits de ce mot binaire, grosso modo
toutes les secondes ou demi-desondes, avec parfois des intervales plus court
(on va dire 1/10e de seconde, rarement plus court).

Mes intervalles sont générés la fonction Sleep. Ca marchait impeccablement
en vb6.

Avec VB.net, mon appli freeze au bout de qq secondes ("ne répond pas"). Mais
si je laisse tourner, lorsque j'arrive au bout de mon programme, l'exécution
redevient normale : l'appli "défreeze" exactement à la fin de la durée
théorique du programme (somme de mes intervalles).

Je sais passi c'est très clair... Y a-t-il quelque chose à faire pour que
l'appli ne freeze pas (et je ne dsais même pas pour quelle raison) ?

Merci,

Séb

2 réponses

Avatar
Sébastien
"Arnaud CLERET" a écrit :
Bonsoir,

Préférez l'utilisation des Timer plutôt que d'effectuer un Sleep entre
chaque traitement.



Merci pour la réponse.
J'ai touefois un peu de mal à trouver comment mettre ça en oeuvre.
Pour l'instant le code ressemble grosso modo, dans la procédure sur Clic
d'un bouton "Démarrer", à ça :

Boucle
Select case Commande
Case Marche
Allumer moteur x
Case Arret
Arrêter moteur y
Case Tempo
Attendre n 1/10e de secondes
End Select
Boucle --> ligne de commande suivante.

Mon appli se déroule ainsi en suivant un programme inscrit dans un fichier
texte ressemblant à peu près à :

Allumer moteur 1
attendre 2s
Allumer moteur 2
attendre 1s
Eteindre moteur 1
Allumer moteur 3
attendre 1,5s
Eteindre moteur 2
Eteindre moteur 3

(je schématise, évidemment).
Bref, la tempo varie à chaque ligne, et du coup je ne sais pas trop comment
gérer ça avec un Timer. Comment faire dans mon Timer_Tick pour revenir dans
ma procédure, là où j'en étais ?

Merci pour votre aide,

Séb
Avatar
Sébastien
"Arnaud CLERET" a écrit dans le message de
news:
En effet, avec ces explications le Timer ne correspond pas à votre besoin.

Pour résoudre votre problème de freeze de l'application, effectuez les
traitements dans thread dédié et distinct de celui de l'UI.

--
arno - http://www.dotnetguru2.org/acleret/




Je n'ai pas encore tenté le multi thread, mais effectivement je m'y
intéresse et je vais essayer de voir ce que ça peut donner. Cela voudrait
dire, en gros, que mon bouton Démarrer va en fait se résumer à un démarrage
de thread et attendre la fin ?

Merci pour cette piste en tout cas, je vais regarder en détail.
Les forum de discussion sont toujours aussi précieux.

Séb