Il faut maitriser .Net pour savoir en faire un ?
ben un peu quand même.
Pour en revenir à ton problème. As-tu toujours des GPF quand tu mets 400 ms
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Au lieu d'utiliser les messages windows tu pourrais utiliser le MS Message Queuing de Microsoft qui est bien plus performant.
Le composant Windows MSMQ n'est pas installé sur windows par défaut en général.
Pour l'installer voir ici
Voici un exemple qui envoie des données par ce procédé toutes les 50 ms dans un thread et qui affiche dans une procédure ce qui est reçu :
Réception de messages en asynchrone (par événements)
Dans Déclaration de ProcéduresGlobales de votre projet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 TheQueue est un objet Automation dynamique MonMsmq est un objet Automation "MSMQ.MSMQQueueInfo" // créer l'objet dynamique MonMsmqEvent est un objet Automation "MSMQ.MSMQEvent" LeMessage est un objet Automation dynamique MonMsmq>>PathName = ".\Private$\MaFileCOM" QUAND EXCEPTION DANS // on crée la File si elle n'existe pas MonMsmq>>Create FAIRE // ceci est une supposition // Info(" MaFileCOM existe déja") FIN TheQueue = MonMsmq>>Open ( 1, 0 ) SI TheQueue>>isOpen ALORS AutomationEvénement("TraiteMonMessage" ,MonMsmqEvent , "{D7D6E078-DCCD-11D0-AA4B-0060970DEBAE}",0) TheQueue>>EnableNotification(MonMsmqEvent) FIN
la procédure globale TraiteMonMessage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PROCEDURE TraiteMonMessage(src ,curseur ) LeMessage = src>>ReceiveCurrent() Trace(LeMessage>>Label + " : " + LeMessage>>Body) src>>EnableNotification(MonMsmqEvent)
La procédure automatique exécutée une fois dans un thread
Il est à noter qu'une fois qu'on a installé MSMQ sur sa machine, on peut voir toutes les Files et les messages dans la console "Gestion de l'ordinateur" (accessible par clic droit sur Ordinateur et faire gérer). Dans Services et Applications, il y a une nouvelle rubrique qui s'appelle "Message Queuing".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 PROCEDURE TestMSQueuing() Queue est un objet Automation dynamique MonMsmq est un objet Automation "MSMQ.MSMQQueueInfo" // créer l'objet dynamique MonMsmq>>PathName = ".\Private$\MaFileCOM" QUAND EXCEPTION DANS MonMsmq>>Create FAIRE // ceci est une supposition Info(" MaFileCOM existe déja") FIN Queue = MonMsmq>>Open ( 2, 0 ) Lemessage est un objet Automation "MSMQ.MSMQMessage" TANTQUE Queue>>isOpen Lemessage>>Label = "Jauge_Level" Lemessage>>Body = Hasard(32767) Lemessage>>Send(Queue) Lemessage>>Label = "Jauge_Peak" Lemessage>>Body = Hasard(32767) Lemessage>>Send(Queue) ThreadPause(5) FIN Queue>>close()
Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko
Bonsoir,
Pour l'instant je suis repassé en thread secondaire pour alimenter la jauge car c'est ce qui plante le moins (voir pas dutout...) même si c'est déconseillé. Car même avec 1000ms de pause, ça arrive bien plus tard certes mais GPF au rapport tout de même !
Je vais tester ton système de MSMQ
Sinon tu fais comment pour intégrer ton usercontrol dans le champ XAML ? J'y connais rien et dans la description du champ, il attend du code...
Merci.
Bonjour,
Il n'y a pas de fonction Windev du genre Invoke/BeginInvoke en .NET ? Ou alors elles correspondent à PostMessage() et SendMessage() ?
Merci.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager