【发布时间】:2010-04-08 14:23:06
【问题描述】:
线程读取 Delphi 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 事件并没有什么特别之处。您的问题同样适用于从 any 两个线程中的 any 类型的函数访问变量。
标签: multithreading delphi