Bonjour,
encore une fois je m'en remets à vous pour analyser un comportement que je n'arrive pas à expliquer.
Je vous décris le contexte :
soit une fenêtre FI_CHIFFRE_AFFAIRE qui me fait un graphe représentant le chiffre d'affaire réalisable sur une période compte tenu du carnet de commande.
ainsi qu'une procédure refresh qui exécute 2 threads, l'un qui récolte les données nécessaires au graphe (temps d'interrogation peut prendre quelques secondes) et l'autre qui va dessiner le graphe quand le premier thread sera terminé :
je veux mettre en standby mon second thread tant que le premier n'est pas terminé, mais la pause ne doit pas avoir lieu dans le thread principal pour ne pas le bloquer
je décide d'utiliser un signal dont le nom est une variable globale de ma fenêtre, égal à "dessine_"+donneIdentifiant(), cette même fenêtre interne pouvant être dupliqué un nombre de fois inconnu, le nom du signal doit être unique.
voici ce que j'essaies de faire actuellement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 PROCEDURE refresh() SignalDétruit(nomSignal) SignalCrée(nomSignal, signalAutomatique, signalFermé) // Exécution du thread de query ThreadArrête("ThreadQuery") ThreadExécute("ThreadQuery", threadNormal, "query") // Exécution du thread de dessin ThreadArrête("ThreadDessine") ThreadExécute("ThreadDessine", threadNormal, "dessine")
au début de dessine() :
et à la fin de query() je lance un SignalModifie(nomSignal, signalOuvert)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SignalAttend(nomSignal) Trace("signal reçu") //suite des instructions de dessin //...
Pourtant, quand je trace l'évolution des 2 procédures threadées, j'ai immédiatement le "signal reçu", alors que la procédure query () a à peine commencé...
Du coup j'ai un plantage de ma procédure de dessin parce qu'elle s'appuie sur des données qui ne sont pas encore présentes !!
Est-ce que je m'y prends mal ?
Merci
Partager