我希望有一个类似 GetCurrentThread 的函数,可以返回当前执行线程的 TThread 对象。我知道有一个 Win32 API 调用 GetCurrentThread,但它只返回线程 ID。如果有可能从该 ID 获取 TThread 对象,那也可以。
我希望有一个类似 GetCurrentThread 的函数,可以返回当前执行线程的 TThread 对象。我知道有一个 Win32 API 调用 GetCurrentThread,但它只返回线程 ID。如果有可能从该 ID 获取 TThread 对象,那也可以。
从你的回答中看来,你似乎只想“确定是否在主线程中运行”,如果是这样,你可以直接使用
if Windows.GetCurrentThreadId() = System.MainThreadID then
// ...
如果由工作线程加载,那么使用Delphi创建的DLL将无法运行。
Delphi最新版本——Delphi 2009,在TThread类中新增了一个CurrentThread类属性。
如果它是原生线程,它将返回正确的Delphi线程对象。如果线程是“外来”线程,即使用其他机制创建的线程或来自第三方线程的回调,则它将在线程句柄周围创建一个包装线程。
当前正在执行的线程不是您尝试从中运行函数的线程吗?
你可以通过调用TlsSetValue API将TThread实例的指针存储在当前线程的上下文中,然后使用TlsGetValue检索它。但是,请注意,这仅适用于尝试检索/存储当前线程的TThread实例。