¿Es seguro que un hilo LEA una variable establecida por un evento Delphi VCL?¿Pueden los hilos leer de forma segura las variables establecidas por los eventos VCL?
Cuando un usuario hace clic en un VCL TCheckbox, el hilo principal establece un valor booleano en el estado Comprobado de la casilla de verificación.
CheckboxState := CheckBox1.Checked;
En cualquier momento, un hilo lee esa variable
if CheckBoxState then ...
No importa si el hilo "no alcanza" un cambio en el valor booleano, porque el hilo comprueba la variable en un bucle como hace otras cosas. Por lo tanto, verá el cambio de estado con el tiempo ...
¿Esto es seguro? ¿O necesito un código especial? Está rodeando la lectura y escritura de la variable (en el hilo y en el hilo principal, respectivamente) con llamadas de código críticas necesarias y suficientes?
Como dije, no importa si el hilo obtiene el valor "incorrecto", pero sigo pensando que podría haber un problema de bajo nivel si un hilo intenta leer una variable mientras el hilo principal está en a la mitad de escribirlo, o viceversa.
Mi pregunta es similar a esta: Cross thread reading of a variable who's value is not considered important.
(También en relación con mi anterior pregunta: Using EnterCriticalSection in Thread to update VCL label)
Tenga en cuenta que los eventos de VCL no son nada especiales. Su pregunta se aplica igualmente bien al acceso a la variable desde * cualquier * tipo de función en * cualquier * dos hilos. –