¿Alguna vez has necesitado utilizar métodos con llamadas thread-safe y no thread-safe, con condiciones que saltan los comandos que no son thread-safe? Actualmente el compilador impide hacer esto y se lanza un error, sin embargo hay una bandera que te permite desactivar esta comprobación y esta entrada del blog te muestra cómo.
En un método de llamada, es posible que ya hayas cambiado ambas partes del código; una parte para el modo preventivo y la otra para el modo cooperativo. Sin embargo, en este caso, el compilador considera que todo el método no es thread-safe, aunque la parte cooperativa del código no se ejecute en modo preemptive. Los métodos que llaman a éste tampoco se consideran seguros para los hilos.
¿Y ahora qué?
Para ayudarle con esta transición de cooperativo a preventivo, 4D le permite ahora deshabilitar la comprobación de seguridad de hilos del compilador de los comandos en partes del código. Para hacer esto, simplemente coloque la directiva del compilador //%T- antes del código no seguro para hilos y //%T+ después de él.
Este es un ejemplo que el compilador considera seguro para los hilos:
PROCESS PROPERTIES(Current process;$name;$state;$time;$flags)
$isPreemptive :=($flags?? 1)
If ($isPreemptive)
LOG EVENT (Into Windows log events; "Error xy occured")
Else
//%T-
DIALOG ("myErrorDialog";New object("message"; "Error xy occured"))
//%T+
End if
Si ejecuta comandos no seguros para hilos entre las directivas del compilador //%T- y //%T+ en un proceso preventivo, 4D simplemente lanza un error.