Utilisation d'une partie non préemptive dans une méthode

Bonjour,

Depuis la version 18, une nouvelle fonction dans l’éditeur de méthode est apparue permettant d’indiquer au compilateur qu’une certaine partie du code ne doit pas être préemptive.

Il suffit d’indiquer le commentaire suivant : //%T- et //%T+ . Tous le code entre ces commentaires ne sera pas identifié comme préemptif pour le compilateur, d’où l’absence de message d’erreur.

L’intérêt pour nous dans cette fonction est qu’une grande méthode avec plusieurs case peut être exécuter sans problème. Par exemple :

au cas ou
: ($v_t_action=“action1”)
//code préemptif
: ($v_t_action=“action2”)
//code préemptif
: ($v_t_action=“action3”)
//code préemptif

: ($v_t_action="action4")
	//%T-
	//code non préemptif (faisait appel par exemple à un élément d'interface)
	//%T+

Fin de cas

Le dernier case ne peut pas être exécuté en preemptif. Ça fonction très bien.

Ma question est :

Est-ce que ce type d’approche permet à la méthode, dans le cas de l’action1 à 3, d’être exécutée en préemptif ou si les tags //%T- et %T+ ne permettent simplement que le compilateur ne voit pas d’erreur et que l’ensemble de la méthode est exécuté en tout temps en mode coopératif.

Bonne journée

Bonjour,

: Francois CLOUTIER

Est-ce que ce type d’approche permet à la méthode, dans le cas de
l’action1 à 3, d’être exécutée en préemptif ou si les tags //%T- et
%T+ ne permettent simplement que le compilateur ne voit pas d’erreur
et que l’ensemble de la méthode est exécuté en tout temps en mode
coopératif.
Ces directives de compilation indiquent au compilateur de ne pas vérifier si le code situé entre elles est threadsafe. De ce fait, si le code situé entre //%T- et //%T+ n’est pas threadsafe et que vous avez activé la propriété de la méthode “Peut être exécutée dans des process préemptifs”, cette méthode sera tout de même considérée comme threadsafe et aucune erreur ne sera levée. Mais attention, cette partie de code ne doit jamais être exécutée dans un process coopératif ! Une bonne pratique serait d’encadrer ce bout de code par un test sur le mode d’exécution du process courant.
Rapporté à votre exemple, le cas d’usage de ces nouvelles directives de compilation est que la méthode est exécutée dans un process préemptif pour les actions 1 à 3, et dans un process coopératif pour l’action 4.
Cordialement,
Damien