gpt4 book ai didi

multithreading - TForm.Handle 线程安全吗?

转载 作者:行者123 更新时间:2023-12-03 18:10:00 25 4
gpt4 key购买 nike

我经常将主窗体句柄传递给其他线程,以便它们可以将消息发回主线程。我在 2013 年 9 月 28 日看到 Remy Lebeau 说:

...the TWinControl.Handle property is not thread-safe, either. You should use the TApplication.Handle property instead, or use AllocateHWnd() to create your own window.

this answer关于传递字符串的问题。

句柄属性怎么不安全?它会在程序的生命周期内发生变化吗?

最佳答案

How is the Handle property not safe?

当您访问Handle 属性时,如果尚未创建窗口句柄,则会按需创建。如果您从 GUI 线程以外的线程访问 Handle 属性,则这意味着您在错误的线程上创建了窗口。

Does it change during the life of the program?

是的,如果重新创建窗口,窗口句柄可以更改。

I routinely pass the main form handle to other threads so that they can post messages back to the main thread.

在这种情况下,您可能不会在主线程之外访问 Handle 属性。听起来(虽然我看不到你的代码)你正在访问主线程上的 Handle 并将该值传递给另一个线程。

但是,窗口娱乐是您的问题。由于您的窗口需要重新创建,因此您根本不能指望该句柄比您的线程还长。很难预测您的窗口是否会被重新创建。 VCL 不会轻易执行娱乐事件。但是,在我看来,安全总比后悔好得多。因此,使用 AllocateHWnd 并控制此窗口的生命周期。

关于multithreading - TForm.Handle 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31460970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com