我的环境:
我对TThread:Synchronize()有疑问。
通常,当我从TThread例程()中更新表单组件(例如Text-> Caption)时,我会使用Synchronize()。
__fastcall TThreadSample::Execute()
{
Synchronize(&updateFormText);
}
其中updateFormText()是用于更新“表单文本”->“标题”的函数。
另一方面,当我
答案 0 :(得分:1)
是。
属性实际上是函数调用的语法糖。读一个还意味着一个函数被调用(好吧,在大多数情况下 [1] )。
换句话说,如果您在代码中执行了以下操作:
x = MyVCLObj->SomeProperty;
实际上,C ++ Builder编译器会为该属性生成对(通常是私有的)getter函数的调用:
x = MyVCLObj->GetSomeProperty();
该代码在主线程的上下文中运行,因此必须使用Synchronize()
对其进行访问。
[1] 我知道并非所有属性都适用,您很可能直接访问成员字段(例如FSomeProperty
),但您是否真的想每次都检查文档? ?这可能会在该类的将来版本中更改。因此,通常应将属性访问视为函数调用。