[Resolu] Mise à jour de gadgets depuis un Thread

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

[Resolu] Mise à jour de gadgets depuis un Thread

Message par erhk »

Dobro a écrit :ta posé la question sur le forum anglais ? 8O
Oui, en voici le résultat :

Réponse de Demivec
Ce qui arrive dans ton exemple de code est que tu ne traite pas les événements de fenêtre chaque fois la fonction SetGadgetText() est exécutée. Tu change l'affichage d'un gadget donc il devrait être redessiné via un événement de fenêtre. Quand tu traite finalement un événement de fenêtre
- c'est après que le thread et le code de boucle principal aient, par boucles, terminés les modifications des gadgets,
- c'est quand tu vois le résultat de tous les événements qui auraient actualisé l'affichage des gadgets.
Essaie de changer ton exemple légèrement pour traiter les événements de fenêtre pendant la boucle dans le code principal (commençant en line n° 39), comme cela :

Code : Tout sélectionner

For Compteur_Win0 = 0 To 29999 
	SetGadgetText(#Compteur_Win0, Str(Compteur_Win0)) 
	Repeat
		event = WindowEvent()	;<== Pas parfait, mais illustre ce que je veux dire. 
	Until event = 0
Next
« What is happening in your example code is that you aren't processing the window events each time the SetGadgetText() function is executted . You change the display of a gadget so it would need to be redrawn via a window event. When you finally do process a window event it is after the thread and the main process code are done looping through the changes to the gadget, that's when you see the result of all the events that would have updated
the gadgets display. Try changing your example slightly to process window events during the loop in the main code (starting on line#39), like this : »

Réponse de freak
SetGadgetText () (du thread) demande à la synchronisation de livrer les messages de fenêtre. Donc tu as besoin d'appeler (Wait) WindowEvent () dans la boucle principale si tu modifie des gadgets depuis un thread.
Tu peux faire cela en utilisant WaitThread () avec un court délai et insérer (Wait) WindowEvent () pour manipuler les événements.

« SetGadgetText() (from the thread) requires thread synchronisation to deliver the window messages. So you need to call (Wait)WindowEvent() in the main thread if you modify gadgets from a thread. You can do this by using WaitThread() with a small timeout and calling (Wait)WindowEvent() inbetween to handle events. »
erhk
Messages : 30
Inscription : lun. 24/nov./2008 12:47

Message par erhk »

Euh :? :?:
Il y a un moyen de signaler que le topic est résolu ?
J'ai essayé de modifier le sujet, mais sans succès.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je l'ai fait pour toi :)

en fait il faut Réediter le Premier message, pour acceder au Titre d'un Topic :)
Répondre