PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Thread bloquant
Thread bloquant
Iniciado por michel, 22,nov. 2004 16:27 - 4 respuestas
Publicado el 22,noviembre 2004 - 16:27
Bonjour tout le monde,

Je fais appel à vous car j'ai un petit soucis de fonctionnement d'une
application utilisant des threads.

J'ai développé une application qui scrute des bases de données MySQL
chez des clients. Les connexions que j'effectue sur les serveurs se
font par SQLConnecte et les ordres sql par SQLExec et SQLFetch pour le
parcours.
Etant donné que ce soft me permet de surveiller l'évolution des bases
durant la journée, j'utilise un table qui me donne la liste de tous les
serveur auquels je dois me connecter, et pour chaque serveur, je
récupère les informations que je désire.

Cette "surveillance" s'effectuant sur 50 serveurs, je partage la liste
en plusieurs threads de traitements. Cela me permet d'effectuer une
surveillance quasiment asynchrone et surtout de ne pas bloquer
complètement l'application.

Cependant, un problème persiste. Lorsque le module de surveillance est
lancé, aucun bouton ou traitement, autre que les threads de
surveillances, ne semble s'exécuter. Et cela m'agace un peu car j'ai
ajouté un interpréteur SQL pour exécuter des ordres tapés et je
souhaiterais pouvoir le lancer pendant la phase de surveillance. Je ne
parviens même pas à exporter le contenu de ma table vers un fichier
Excel.

Cela me déçoit énormément de voir que Windev gère le "multithreading"
mais que cela ne fonctionne pas !!!! :-@
Maintenant, il se peut que je m'y prenne mal. Si quelqu'un a une
solution à me donner, vous m'aideriez énormément.

Je précise que les thread sont en mode SectionCritique (Plusieurs
threads utilisent la fonction SQLExec)

Merci d'avance pour votre aide.

--
Michel GILLET
Société AVALONE
michel@avalone-fr.com
Publicado el 22,noviembre 2004 - 17:41
Salut

Dans les threads il vaut mieux laisser respirer le CPU dès qu'on peut !
Tu dois avoir des boucles trop monopolisantes, l'idéal est de placer à la
fin de traitement de chaque thread (à la fin de la boucle du thread)
un petit "ThreadAttendSignal(10)" cette action redonne la main au système et
le reste tourne nettement mieux, et je pense que chaque thread peut se
permettre de rendre la main au moins 100 ms !
A moduler suivant chaque cas !
@+
Thierry

"GILLET Michel" <michel@avalone-fr.com> a écrit dans le message de news:
mn.b39f7d4b2fe8e9a3.22767@avalone-fr.com...

Bonjour tout le monde,

Je fais appel à vous car j'ai un petit soucis de fonctionnement d'une
application utilisant des threads.

J'ai développé une application qui scrute des bases de données MySQL
chez des clients. Les connexions que j'effectue sur les serveurs se
font par SQLConnecte et les ordres sql par SQLExec et SQLFetch pour le
parcours.
Etant donné que ce soft me permet de surveiller l'évolution des bases
durant la journée, j'utilise un table qui me donne la liste de tous les
serveur auquels je dois me connecter, et pour chaque serveur, je
récupère les informations que je désire.

Cette "surveillance" s'effectuant sur 50 serveurs, je partage la liste
en plusieurs threads de traitements. Cela me permet d'effectuer une
surveillance quasiment asynchrone et surtout de ne pas bloquer
complètement l'application.

Cependant, un problème persiste. Lorsque le module de surveillance est
lancé, aucun bouton ou traitement, autre que les threads de
surveillances, ne semble s'exécuter. Et cela m'agace un peu car j'ai
ajouté un interpréteur SQL pour exécuter des ordres tapés et je
souhaiterais pouvoir le lancer pendant la phase de surveillance. Je ne
parviens même pas à exporter le contenu de ma table vers un fichier
Excel.

Cela me déçoit énormément de voir que Windev gère le "multithreading"
mais que cela ne fonctionne pas !!!! :-@
Maintenant, il se peut que je m'y prenne mal. Si quelqu'un a une
solution à me donner, vous m'aideriez énormément.

Je précise que les thread sont en mode SectionCritique (Plusieurs
threads utilisent la fonction SQLExec)

Merci d'avance pour votre aide.

--
Michel GILLET
Société AVALONE
michel@avalone-fr.com
Publicado el 22,noviembre 2004 - 18:35
GILLET Michel a formulé la demande :

Je précise que les thread sont en mode SectionCritique (Plusieurs
threads utilisent la fonction SQLExec)


Si tu déclares une "section critique", c'est justement pour qu'elle ne
soit pas exécutée par plusieurs threads en même temps.
Sinon, il faut utiliser les sémaphores.

A+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Publicado el 22,noviembre 2004 - 18:56
Franck a exprimé avec précision :
GILLET Michel a formulé la demande :

Je précise que les thread sont en mode SectionCritique (Plusieurs
threads utilisent la fonction SQLExec)

Si tu déclares une "section critique", c'est justement pour qu'elle ne
soit pas exécutée par plusieurs threads en même temps.
Sinon, il faut utiliser les sémaphores.

A+


Ah bon, merci, je n'avais pas compris cela comme ca.
Merci

--
Michel GILLET
Société AVALONE
michel@avalone-fr.com
Publicado el 22,noviembre 2004 - 19:21
GILLET Michel avait énoncé :

Salut,

Ah bon, merci, je n'avais pas compris cela comme ca.
Merci


De rien, regardes la doc au mot-clé "SectionCritiqueDébut", c'est très
bien expliqué.

SectionCritiqueDébut: Signale le début d'une section critique

AUCUN AUTRE THREAD ne pourra exécuter le code tant que le thread
courant ne sera pas sorti de la section critique.
Pour sortir de la section critique, utilisez la fonction
SectionCritiqueFin.

A+
Franck

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net