Lb et process

Bonjour à tous

J’ai une Listbox tableaux. Quand je clique sur une ligne, je lance un nouveau process.

Si je clique sur une seconde ligne et que le premier process n’est pas terminé, il y a erreur dans la valeur que je récupére dans ma variable interprocess.

Comment gérer cela :?:
Suspendre les anciens process si en cours d’exécution :?:

Je suis preneur de vos :idea:

Interprocess implique sémaphore local ($monSemaphore). Ce dernier te permet de gérer l’accès “un seul à la fois” à la variable IP, tu peux t’inspirer https://doc.4d.com/4Dv17R4/4D/17-R4/Semaphore.301-4054941.fr.htmldes exemples 3 et 4> de la doc.

sémaphore mais bien sur :twisted:

Merci Arnaud :!:

: Matthieu LAMPERIERE

sémaphore mais bien sur
Think semaphore, think toilets.

: Matthieu LAMPERIERE

il y a erreur dans la valeur que je récupére dans ma variable
interprocess.

Pourquoi ne pas (enfin) débuter avec le storage et y stocker la référence du process (plutôt que dans une interprocess) ?

Dis moi plus ça m’intéresse :wink:

: Matthieu LAMPERIERE

Dis moi plus ça m’intéresse :wink:

Bien sûr!

Le job: rafraichir le crédit de mon compte dans une palette flottante si elle est affichée.

Voici, à peine simplifié, 3 bouts de code:

<code 4D>
// Au lancement de la base
If (Storage.lancement=Null)

Use (Storage)
	Storage.lancement:=New shared object
	
	Use (Storage.lancement)
		Storage.lancement.refpalette:=-1// remplace l'utilisation de l'interprocess qui n'est pas thread-safe
	End use 
End use 

End if

// Quand la fenêtre s’ouvre
Use (Storage.lancement)
Storage.lancement.refpalette:=$L_W// obtenu avec open form window
End use

// Quand je dois rafraichir ma fenêtre
If (Storage.lancement.refpalette>0)
CALL FORM(Storage.lancement.refpalette;“Palette_Credits_refresh”)
End if

</code 4D>

Bon j’ai fait un premier test avec les sémaphores…

Le souci est lorsque je défile rapidement les lignes, le process se lance sur l’événement sur nouvelle sélection, et c’est pas toujours concluant…

Y’a t’il une contre indication de suspendre un process et d’en créer un nouveau sur chaque nouvelle sélection :?:

Pour prendre le problème d’un peu plus haut

Quand l’utilisateur clique sur une ligne, je lance un nouveau process avec un traitement OCR

Le problème est que si l’utilisateur souhaite défiler rapidement les lignes, ça rame…

Une approche à me conseiller :?:

Tu peux attendre que l’utilisateur “se stabilise” sur une ligne un certain temps, avant de lancer. En classique, ça se faisait avec le minuteur, en pas classique je sais pas.

OK je vais tester cela

J’ouvre une fenêtre avec ce process, si je fais un appel extérieur, on est bien d’accord que cela arrête le process en cours :?: :!: en clair le process est tué

: Matthieu LAMPERIERE

si je fais un appel extérieur

Un “appel extérieur” se fait dans le cadre d’un formulaire et l’événement adhoc. Tu es es dans un formulaire ?

Oui j’ai crée une fenêtre de progression

Si je suspends un process à moitié de son exécution, lorsque je le réactive, il reprend depuis le début ou depuis sa suspension :?:

Bon j’ai fini par faire une gestion de process…si l’utilisateur change de ligne, je laisse le précédent process se terminer, mais j’ignore les variables…
et je teste si je suis bien dans le dernier process crée pour récupérer les valeurs…