【发布时间】:2014-04-11 13:09:26
【问题描述】:
假设我想在程序处于子线程中时简单地更改标签的标题。我不想使用同步。我真的不想让操作系统切换到另一个线程上下文来完成这项工作。我知道我不能通过在我的子线程中放置一些锁(信号量或其他东西)来做到这一点。谁能告诉我为什么我不能为此使用锁? 在此先感谢:)
【问题讨论】:
-
如果你想要一个稳定的解决方案,你必须使用
Synchronize或Queue -
@SirRufo 为什么我不能只使用一些锁? vcl 控件不是典型的共享资源吗?我的意思是为什么要以不同的方式处理 VCL 控件?
-
您也可以使用PostMessage 将自定义消息发布到 VCL 表单的句柄。
-
作为替代方案,您可以在子线程中使用 Windows API(直接使用窗口句柄),在某些情况下您可以摆脱它。但要小心,VCL 假定它只在主线程中运行,并且 VCL 方法用于操作底层窗口。在某些情况下,底层窗口可能与 VCL 包装类的属性不同步。
-
不安全,抱歉。 VCL 不是线程安全的。
标签: multithreading delphi synchronize