PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Multitâche() - Quelle valeur donner ?
Multitâche() - Quelle valeur donner ?
Débuté par info, 13 jan. 2006 07:49 - 4 réponses
Posté le 13 janvier 2006 - 07:49
Bonjour,

J'ai 2 threads qui "écoutent" et traitement les informations reçues sur 2 ports COM. L'écoute se fait dans une boucle pour chaque thread. Cela fonctionne bien sauf qu'après plusieurs heures, l'application semble figée, plus moyen de la faire réagir au clics souris bien que le survol des boutons les fasse changer d'aspect (mode 5 images par exemple).
Faut il mettre Multitâche(1 ou supérieur) ou Multitâche(-1 ou inférieur) dans chacun des thread pour avoir une chance de reprendre la main sur l'application ? Ou pensez vous à une autre solution ?

Merci pour vos réponses.

Cordialement.
Posté le 13 janvier 2006 - 09:40
Bonjour,

Je trouve que l'aide de Windev est assez sur ce sujet

********************************************

Temporisation> : Entier

Temporisation : entier positif. L'exécution de l'application est suspendue durant <Temporisation> 100ème de seconde sans rendre la main au système. Les clics de souris et les actions sur les touches du clavier sont ignorés par l'application. Par exemple, la fenêtre peut être déplacée mais pas agrandie.

La modification de la taille de la fenêtre n'est pas ignorée. Par contre, les clics souris et les actions sur les touches du clavier sont ignorées.
Rendre la main à Windows : <Temporisation> = 0 ou n'est pas indiqué. Windows finit les traitements en cours puis rend la main à l'application WinDev.

Si <Temporisation> = 0, la fonction Multitâche est sans effet.
Rendre la main à Windows et au W-Langage : entier négatif. L'exécution de l'application est suspendue durant <Temporisation> 100ème de seconde. D'autres traitements peuvent être exécutés durant cette période de temps (ré-affichage ou exécution d'un code de clic par exemple). Les interactions avec l'utilisateur (clics de souris, frappe au clavier, ...) sont gérées normalement.

********************************************

Par contre ce que j'ai constaté avec un de mes programmes qui utilise un Thread, avec un multitache(-500) pour attendre 5 secondes, en rendant la main à Windows, c'est que si je clique sur un bouton, ou un menu, mon application Windev met également jusqu'à 5 secondes pour réagir. Pour mon application cela ne me gène pas.

@+, JF
Posté le 13 janvier 2006 - 11:32
"F10" <info@adsi.ch> a écrit dans le message de
news:43c6dff5$1@news.pcsoft.fr...

Bonjour,

J'ai 2 threads qui "écoutent" et traitement les informations reçues sur 2

ports COM. L'écoute se fait dans une boucle pour chaque thread. Cela
fonctionne bien sauf qu'après plusieurs heures, l'application semble figée,
plus moyen de la faire réagir au clics souris bien que le survol des boutons
les fasse changer d'aspect (mode 5 images par exemple).
> Faut il mettre Multitâche(1 ou supérieur) ou Multitâche(-1 ou inférieur)
dans chacun des thread pour avoir une chance de reprendre la main sur
l'application ? Ou pensez vous à une autre solution ?

Merci pour vos réponses.

Cordialement.


Bonjour,

Sauf erreur de la part, le Multitache() est à bannir des threads.
Préferer l'utilisation de ThreadAttendSignal().

Michel Fages
Posté le 17 janvier 2006 - 08:18
Bonjour,

Dans la boucle (BOUCLE ... FIN), la première version en exploitation utilisait la fonction Multitâche(-1). Dans le Gestionnaire de tâches de Windows (XP), le Processeur montait à 50-52 en permanence tant que mes boucles tournaient. Au bout d'un certain temps, plus ou moins long, et fonction de l'utilisation du PC (autres applications), l'application ne réagissait plus aux clics souris, enter, etc... Après divers test, nous avons changé le Multitâche(-1) en Multitâche(-2) et l'utilisation du processeur est maintenant à zéro sauf lorsque dans ma boucle un process est lancé. Dans ce cas il monte à 15-20 puis redescend à 0. Cette version est en exploitation depuis peu. Je confirmerai les résultats d'ici 10 jours.

Remerciement à tous pour vos réponses.
Posté le 17 janvier 2006 - 10:40
Bonjour,

En WD 10, il existe une nouvelle fonction "ThreadPause" qui comme l'indique son nom permet de faire une pause dans l'exécution.

@+, JF