Est-il sûr pour un thread de lire une variable définie par un événement Delphi VCL?Les threads peuvent-ils lire en toute sécurité les variables définies par les événements VCL?
Lorsqu'un utilisateur clique sur un TCheckbox VCL, le thread principal définit un booléen sur l'état Vérifié de la case à cocher.
CheckboxState := CheckBox1.Checked;
A tout moment, un thread lit cette variable
if CheckBoxState then ...
Peu importe si le fil "manque" une modification du booléen, car le thread vérifie la variable dans une boucle comme il fait d'autres choses. Donc, il verra l'état changer finalement ...
Est-ce sûr? Ou ai-je besoin de code spécial? Est-ce que la lecture et l'écriture de la variable (dans le thread et le thread principal respectivement) entourent les appels de code critique nécessaires et suffisants? Comme je l'ai dit, peu importe si le thread obtient la "mauvaise" valeur, mais je continue à penser qu'il pourrait y avoir un problème de bas niveau si un thread essaie de lire une variable pendant que le thread principal est en au milieu de l'écriture, ou vice versa.
Ma question est similaire à celle-ci: Cross thread reading of a variable who's value is not considered important.
(également lié à ma question précédente: Using EnterCriticalSection in Thread to update VCL label)
Notez que les événements VCL ne sont pas vraiment spéciaux. Votre question s'applique tout aussi bien à l'accès à la variable à partir de n'importe quel * type * de fonction dans * n'importe quel * deux threads. –