Delphi线程问题-线程调用主窗体中定义的过程

问题描述 投票:0回答:1

如果我有一个线程调用主窗体中定义的过程,并且该过程从支持单元调用另一个函数,并使用主窗体中定义的变量 - 这是线程安全的吗?调用可能访问公共变量的子程序时,是否需要在线程中使用

Synchronize()

我知道,如果我的线程直接访问公共变量/组件,我需要避免它或使用

Synchronize()
,但是那些从线程代码调用的子例程中间接访问的变量/组件又如何呢?

multithreading delphi thread-safety
1个回答
1
投票

从哪个过程/函数访问这些变量并不重要。重要的是这些过程/函数在哪个线程上下文中执行。

所有与 UI 连接/耦合的变量都需要在主线程的上下文中访问。

但是,如果同时被多个线程访问,任何其他未连接/耦合到 UI 的变量仍然可能是不安全的。

这就是为什么有这么多不同的保护机制可以防止这种情况发生。

使用

Synchronize
是将某些代码与主线程同步的最简单方法。但其他机制,如CriticalSectionsSystem.TMonitor等,通常用于防止多个线程同时访问同一变量/对象。

© www.soinside.com 2019 - 2024. All rights reserved.