線程讀取由Delphi VCL事件設置的變量是否安全?線程能否安全地讀取由VCL事件設置的變量?
當用戶點擊VCL TCheckbox時,主線程將boolean設置爲複選框的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事件並沒有什麼特別的。您的問題同樣適用於從* any *兩個線程中的* any *類型的函數訪問變量。 – 2010-04-08 15:06:13