Alguma vez precisou de utilizar métodos com chamadas com e sem fios, com condições que saltam sobre comandos que não são seguros para os fios? Actualmente o compilador impede fazer isto e é atirado um erro, mas há uma bandeira que lhe permite desactivar esta verificação e este post no blogue mostra-lhe como.
Num método de chamada, pode já ter alterado ambas as partes do código; uma parte para o modo preventivo e a outra parte para o modo cooperativo. Contudo, neste caso, o compilador considera que o método completo não é seguro para os fios, mesmo que a parte cooperativa do código não seja executada em modo preventivo. Os métodos que chamam a este método também não são considerados “thread-safe”!
E agora?
Para o ajudar nesta transição de cooperativo para preventivo, 4D permite agora desactivar a verificação dos comandos de segurança de threads do compilador em partes do código. Para o fazer, basta colocar a directiva //%T- do compilador antes do código não seguro de threads e //%T+ depois dele.
Aqui está uma amostra que é considerada pelo compilador como thread-safe:
PROCESS PROPERTIES(Current process;$name;$state;$time;$flags)
$isPreemptive :=($flags?? 1)
If ($isPreemptive)
LOG EVENT (Into Windows log events; "Ocorreu um erro xy")
Else
//%T-
DIALOG ("myErrorDialog";New object("mensagem"; "Ocorreu um erro xy"))
//%T+
End if
Se executar comandos não seguros entre as directivas //%T- e //%T+ do compilador num processo preventivo, 4D simplesmente atira um erro.