PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WEBDEV 2024 → Thread et fonction ExecuteThreadPrincipal
Thread et fonction ExecuteThreadPrincipal
Iniciado por Jean-Jacques, 05,dic. 2019 07:12 - 10 respuestas
Miembro registrado
55 mensajes
Publicado el 05,diciembre 2019 - 07:12
Bonjour à tous,

Je suis bloqué dans mon projet à cause d’un problème tout bête :

J’ai un thread qui écoute ce qui arrive sur une socket UDP (code serveur biensûr).
Le thread fonctionne bien, je vois clairement les trames arrivées si j’utilise la fenêtre de Trace.

Je souhaite maintenant afficher les trames reçues dans l’IHM.
J’ai du coup créé une fonction (code serveur toujours) qui permet d’afficher ces trames vu que l’accès au champs depuis un thread ne fonctionne pas.

Et j’appelle cette fonction dans mon Thread de réception avec un ExecuteThreadPrincipal(...)

Et bien ça ne marche pas du tout.
Je vois, dans le trace, la première trame, et ensuite plus rien !
Le ExecuteThreadPrincipal() me bloque le thread de réception et rien ne s’affiche sur l’IHM.

Si je l’enlève, tout fonctionne (dans le trace).

La fonctionne ExecuteThreadPrincipal est-elle compatible avec Webdev ?
Y a t il des particularités sous Webdev ?
J’ai rien trouvé sur le net...

Merci à vous !!!

--
cordialement,

jjacques68
Miembro registrado
1.623 mensajes
Popularité : +100 (114 votes)
Publicado el 05,diciembre 2019 - 12:28
Hello,

Ce n'est pas possible en webdev je pense.
Si tu fais un appel ajax, meme en utilisant un thread, il bloquera tout autre appel ajax jusqu'a ce qu'il soit terminé.

Je ne sais pas ce que tu cherche a faire, mais il y a peut etre une AUTRE solution si tu nous explique un peu ce que tu cherche a réaliser.

Ou voir du coté des taches diférées peut etre.. mais encore je suis pas sur que tu puisse du coup faire un retour vers la page navigateur après.
Mensaje modificado, 05,diciembre 2019 - 12:29
Miembro registrado
55 mensajes
Publicado el 05,diciembre 2019 - 21:49
merci pour la réponse,

Alors je souhaite simplement afficher dans une page web la trame reçue sur la socket.

Voici le code du Thread d’écoute : (appelée par un ThreadExecute())

Procedure Socket_Reception()

BOUCLE

sMonMessage est une chaîne = SocketLit("Client",Faux,200)

SI sMonMessage <> "" ALORS
Trace(sMonMessage)
ExécuteThreadPrincipal(Affiche,sMonMessage)
FIN

FIN


et voici le code de la procédure « Affiche » : (où LISTE_Rx est le champ dans lequel je souhaite afficher la trame)

Procedure Affiche(sMonMessage est une chaîne)

ListeAjoute(LISTE_Rx,sMonMessage)


Je précise que le trace dans le thread fonctionne très bien.

--
cordialement,

jjacques68
Mensaje modificado, 05,diciembre 2019 - 21:50
Publicado el 06,diciembre 2019 - 07:54
Je pense qu'il faut séparer ton code en 2 modules :

- coté serveur, tu as déjà le code qui récupère tes trames, il te manque juste quelques lignes pour l'écrire quelque part (je conseille dans un fichier de la base de données, facon historique)

- coté navigateur, tu ajoute un timer qui périodiquement fait un ajaxexecute (ou ajaxexecuteasynchrone) d'une autre fonction serveur qui va lire l'historique depuis la dernier affichage et soit renvoit au navigateur qui fera l'affichage, soit affiche directement en ajax.
Miembro registrado
55 mensajes
Publicado el 06,diciembre 2019 - 17:17
merci pour l’idée !

mais l’intérêt de passer par une socket était justement éviter les boucle de lecture dans une base de données... et de gagner en réactivité.

sinon je peux me passer de la socket, l’application « serveur » rempli alors la base de donnée, et l’application « client » va la lire.

Mais je ne souhaite pas cette méthode.

de plus, là je parle d’écouter une socket, mais au final, l’application « cliente » écrirera aussi sur la socket.
ça ça marche bien, déjà testé.

Je pense que je suis obligé de travailler avec la socket. faut juste trouver un moyen de pouvoir lancer une procédure depuis un thread !!

--
cordialement,

jjacques68
Miembro registrado
55 mensajes
Publicado el 07,diciembre 2019 - 08:11
J’ai essayé avec les taches parallèles et même résultat...

--
cordialement,

jjacques68
Miembro registrado
1.623 mensajes
Popularité : +100 (114 votes)
Publicado el 09,diciembre 2019 - 10:35
Je ne m'en suis jamais servi mais il y a les Websocket qui a priori sont fait pour faire ce que tu souhaite :
https://doc.pcsoft.fr/?1000017192
Miembro registrado
55 mensajes
Publicado el 09,diciembre 2019 - 11:03
merci, oui en effet je suis en train d’essayer de comprendre le mécanisme.

je tiens au courant...

merci !

--
cordialement,

jjacques68
Miembro registrado
477 mensajes
Popularité : +20 (20 votes)
Publicado el 09,diciembre 2019 - 11:48
Je viens de tester et effectivement avec Webdev le ExécuteThreadPrincipal executé dans un thread ne fonctionne pas, pas plus qu'une tache de continuation avec tpoThreadPrincipal
Il doit y avoir une bonne raison a cela ou pas mais dans l'aide rien ne dit que cela ne fonctionne pas alors je pense qu'il serait intéressant de poser la question au support technique
Miembro registrado
55 mensajes
Publicado el 09,diciembre 2019 - 12:42
j’ai contacté le support technique.
ils confirment que le ExecuteThreadPrincipal ne fonctionne pas sur le code navigateur.
mais que sur le code serveur.

--
cordialement,

jjacques68
Miembro registrado
477 mensajes
Popularité : +20 (20 votes)
Publicado el 09,diciembre 2019 - 14:31
Pour moi cela ne fonctionne pas plus en code serveur !
Vos procédures étaient bien en code serveur d'ailleurs non ?