PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Mettre à jour un champ régulièrement depuis un Thread
Mettre à jour un champ régulièrement depuis un Thread
Débuté par Alexandre LAVIGNE, 23 jan. 2020 11:25 - 4 réponses
Membre enregistré
22 messages
Posté le 23 janvier 2020 - 11:25
Bonjour,

J'aimerai mettre en place un système qui actualise ma page régulièrement toute les secondes.
Pour cela, j'ai essayé d'utiliser des thread, seulement le problème auquel je suis confronté est qu'un thread secondaire ne peut mettre à jour un champ, et si j'essaye de faire cela depuis le thread principal, le Multitâche(100) bloque mon site indéfiniment.

Voici mon code actuellement :
Dans le code d'initialisation :
ThreadExecute("tempo",threadNormal,timer_actualisation)


La fonction timer_actualisation :
TANTQUE Vrai
Multitâche(100)
LIB_TEST = DateHeureSys()
FIN


Mais ça ne marche pas, le champ ne s'update pas.

==> Est-ce que ce que je cherche à faire est faisable ?
==> Si oui, comment ?

Merci d'avance pour vos réponses !
Membre enregistré
22 messages
Posté le 23 janvier 2020 - 11:51
J'ai finalement trouvé une solution à mon problème.
Finalement, pas besoin de thread

Dans le code navigateur de chargement de ma page j'appelle :
Timer(timer_actualisation,100)


Ma fonction timer_actualisation appelle un AJAXExécuteAsynchrone
Procedure timer_actualisation()
AJAXExécuteAsynchrone(maj_page(),actualise_Page)


Ma procédure serveur maj_page :
Procedure maj_page()
RENVOYER DateVersChaîne(DateHeureSys())


Et la procédure navigateur actualise_Page qui met à jour mon champ :
Procedure actualise_Page(param est une chaîne)
LIB_TEST = param



C'est probablement très sale mais au moins ça produit l'effet recherché.
Si quelqu'un a une solution alternative, avec des threads par exemple, ça m'intéresse.
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 23 janvier 2020 - 12:09
Salut Alexandre,

Utilise pour cela le système de procédure automatique

https://doc.pcsoft.fr/fr-FR/?9000072

A+
Daryl

--
https://www.concept4u2.com
Membre enregistré
324 messages
Popularité : +21 (51 votes)
Posté le 23 janvier 2020 - 12:24
Ouais sinon un simple timer navigateur qui appel du javascript

var date = new Date();
    var str = date.getHours();
    str += ':'+(date.getMinutes()<10?'0':'')+date.getMinutes();
    str += ':'+(date.getSeconds()<10?'0':'')+date.getSeconds();


(bien sûr c'est juste la partie qui récupère la date heure, je vous laisse faire le reste du code)

Et tout se fait au niveau du navigateur pour le coup, aucun appel, server, pas d'ajax qui tourne en parralèlle.

Après j'ai envie de dire ca va pomper des ressources pour pas grand chose, afficher la date heure en temps réel sur un site est elle vraiment pertinante ? dans la mesure ou sous windows / mac , linux, android ou IOS, l'heure est visible en permanance dans le fond :)
Message modifié, 23 janvier 2020 - 12:25
Membre enregistré
324 messages
Popularité : +21 (51 votes)
Posté le 23 janvier 2020 - 12:30
TANTQUE Vrai
Multitâche(100)
LIB_TEST = DateHeureSys()
FIN


Ah oui et pour celà y'a plusieurs erreurs expliquant pourquoi ca ne fonctionne pas :

- Vous avez mis dans un thread un timer, or un timer est déjà un truc qui tourne en parallèle donc pas besoin de cela ici
- Ensuite le timer, quand il met moins de temps à s'exécuter que son temps de répétition, bien entendu il va attendre le multitache ne sert à rien
- Ensuite quand vous rentrer dans la boucle avec le tantque, y'a aucun point de sorti, la boucle ici n'est pas utilise puisque c'est le timer en lui même qui boucle
- Enfin vous avez un timer qui tourne toute les secondes, et dès que vous rentrez dans la boucle, vous forcez une pause d'une seconde. Donc jamais le code ne s'exécute, j'en veux pour preuvre que si il s'executait correctement, il provequerait un crash du site puisque chaque seconde il lancerait un nouveau thread, qui lancerai un nouveau timer, qui bouclerai sans fin ;) et après quelques minutes au revoir la ram ;) et les lenteurs dans le navigateur aussi qui aurait trop de tâches à gérer !