스레드가 Delphi VCL 이벤트로 설정된 변수를 읽는 것이 안전합니까?스레드가 VCL 이벤트로 설정된 변수를 안전하게 읽을 수 있습니까?
사용자가 VCL TCheckbox를 클릭하면 주 스레드는 확인란의 Checked 상태를 부울로 설정합니다. 언제든지
CheckboxState := CheckBox1.Checked;
는 스레드 읽는 변수
if CheckBoxState then ...
스레드 부울 변경을 "그리워"만일 스레드가 루프 등의 변수를 확인하기 때문에 이것은 문제가되지 않는다 그것은 다른 일을합니다. 그러면 결국 국가 변경이 표시됩니다 ...
안전한가요? 아니면 특별한 코드가 필요합니까? 중요한 코드 호출이 충분하고 충분하면 (각각 스레드와 메인 스레드에서) 변수의 읽기 및 쓰기를 둘러 쌉니까?
내가 말했듯이 스레드가 "잘못된"값을 얻는지는 중요하지 않지만 주 스레드가있는 동안 한 스레드가 변수를 읽으려고하면 저수준 문제가 발생할 수 있다고 생각합니다. 그것을 쓰는 중간, 또는 그 반대입니다.
제 질문은 Cross thread reading of a variable who's value is not considered important과 비슷합니다.
(또한 내 앞의 질문에 관련된 : Using EnterCriticalSection in Thread to update VCL label) 당신이주는 예를 들어
VCL 이벤트는 실제로 특별한 것이 아닙니다. 귀하의 질문은 * 모든 * 두 스레드의 * 모든 종류의 함수에서 변수에 액세스하는 데 똑같이 적용됩니다. –