|
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 |
| |
| |
| | | |
|
| | | | |
| | |
|