|
| ExécuteThreadPrincipal en Java |
| Iniciado por Jean, 04,nov. 2017 11:14 - 4 respuestas |
| |
| | | |
|
| |
Miembro registrado 10 mensajes |
|
| Publicado el 04,noviembre 2017 - 11:14 |
Bonjour à tous,
J'ai une application qui cible deux plateformes (Windows 64 et Java). Dans cette application, j'ai un traitement relativement long qui freeze l'interface s'il n'est pas exécuté dans un thread secondaire.
La procédure qui s'exécute dans ce thread secondaire doit accéder aux éléments de l'interface pour actualiser certains contrôles et remplir une table. Lorsque je cible Windows, je peux utiliser la fonction ExécuteThreadPrincipal pour effectuer ces mise à jour d'interface en utilisant le le thread principal.
En Java, la fonction ExécuteThreadPrincipal n'est pas disponible et je suis donc obligé de lancer mon traitement secondaire dans le thread principal puisque ensuite je n'ai pas la possibilité de mettre à jour mon interface. Je me retrouve donc à jouer avec les codes cibles conditionnels pour exécuter dans le thread principal si en Windows ou exécuter simplement la procédure en Java (avec des appels à Multitâche() ensuite) pour chaque procédure permettant de mettre à jour l'interface.
Avez-vous une idée de solution plus élégante et/ou moins contraignante à me proposer ?
C'est vraiment dommage que cette fonction ExécuteThreadPrincipal ne soit pas disponible en Java (elle est disponible en Android ... et Android, c'est du Java ... mais bon )
Merci d'avance pour votre aide  |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 954 mensajes |
|
| Publicado el 08,noviembre 2017 - 20:48 |
Coucou,
Tu pourrais essayer de passer via DemandeMiseAJourIHM ?
https://doc.pcsoft.fr/?1000021378
-- Charly CanDo - In üs we trust - #92i Do. Or do not. There is no try - #y0d4
(#Compétence & #rapidité & #implication & #references) > #PasDeCV Je suis disponible pour du consulting Windev (#debug #Optimization #System #Etc) |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 10 mensajes |
|
| Publicado el 08,noviembre 2017 - 22:05 |
Hello,
Merci pour la suggestion mais malheureusement, la fonction DemandeMiseAJourIHM n'est pas non plus disponible en Java. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 954 mensajes |
|
| Publicado el 08,noviembre 2017 - 23:26 |
Coucou,
Au temps pour moi 
Tient finalement cétait interessant comme question, et oui j'ai decouvert qui a deux trois qui a pas en java c dommage, mais sa viendras 
Alors j'ai peut etre une idée c de passé via les Signal qui sont dispo eux en java ^^
Donc l'idée c de crée une procedure differere a la creation de la fenetre :

De la dans cette procedure :
Procedure PRIVÉE DemandeMiseAjour() BOUCLE SI SignalAttend(MaFenêtre..NomComplet, 1) = 1 ALORS _nIndex est un entier = TableAjouteLigne(TABLE_SansNom1) TABLE_SansNom1[_nIndex].COL_SansNom1 = DonneGUID(guidBrut) SignalModifie(MaFenêtre..NomComplet, SignalFerme) FIN Multitâche(-10) FIN FIN: SignalDétruit(MaFenêtre..NomComplet)
Ensuite ton thread de traitement va "Ouvrir" le signal quant des données sont dispo (protégé via des sections critique ^^)
Procedure Thread_Premier(_sNomDelaFenereARafraichier est une chaîne) BOUCLE SignalModifie(_sNomDelaFenereARafraichier, signalOuvert) ThreadPause(5) FIN
_sTreadname est une chaîne = DonneGUID(guidBrut)
ThreadExecute(_sTreadname, threadNormal, "Thread_Premier", MaFenêtre..NomComplet)
gSignalName est une chaîne = DonneGUID(guidBrut)
SignalCrée(MaFenêtre..NomComplet, SignalAutomatique, SignalFerme)
Et tu coup en nom de Signal j'ai prit e nom de la fenetre, mais c mieux que dans ton project tu passe par un guidbrut ^^
Voila je pense que sa peut te filer des idées 
Et bien sur si sa te plait pas, ou autre, repost et on en reparle 
-- Charly CanDo - In üs we trust - #92i Do. Or do not. There is no try - #y0d4
(#Compétence & #rapidité & #implication & #references) > #PasDeCV Je suis disponible pour du consulting Windev (#debug #Optimization #System #Etc)Mensaje modificado, 08,noviembre 2017 - 23:27 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 10 mensajes |
|
| Publicado el 30,diciembre 2018 - 21:13 |
Je sais que je suis très très en retard Charly mais je voulais tout de même te remercier pour ta réponse. Je n'étais pas arrivé à faire quelque chose de satisfaisant avec les signaux.
Cependant, depuis la version 23, les tâches parallèles sont disponibles en Java et il est possible de lancer une procédure dans le Thread principal en utilisant la constante tpoThreadPrincipal en 3ème argument de la fonction TâcheParallèleExécute, ce qui revient exactement à la même chose que la fonction ExécuteThreadPrincipal ... Bref, je ne comprends pas pourquoi ils n'ont pas rendu disponible cette fonction en Java dans Windev 23 (c'est sans doute un oubli, mais ce n'est pas grave puisque il est possible de faire avec TâcheParallèleExécute) .
Depuis la v.23, il est également possible de lancer une procédure dans le Thread principal en utilisant les automatismes de procédure dans une configuration Java (ce qui n'était pas possible auparavant).
Exemple d'utilisation :
TâcheParallèleExécute(ProcédureA, (), tpoThreadPrincipal)
Documentation de TâcheParralèleExécute (Fonction) : https://doc.pcsoft.fr/?1000021211&verdisp=230 Documentation des automatismes de procédure : https://doc.pcsoft.fr/fr-FR/?9000072&name=Procedures_automatiquesMensaje modificado, 30,diciembre 2018 - 21:17 |
| |
| |
| | | |
|
| | | | |
| | |
|