gpt4 book ai didi

c++ - 从 win32 线程调用 TForm 的成员应该满足什么条件?

转载 作者:行者123 更新时间:2023-11-28 03:51:58 25 4
gpt4 key购买 nike

我使用带有标准函数原型(prototype)的 CreateThread() 创建了一个线程DWORD WINAPI func(LPVOID param);

当我调用 TForm 的成员时,它有时会因访问冲突而崩溃。我不想使用 Embarcadero 的 TThread 样式函数,更喜欢 win32 std api。我应该满足哪些同步/其他条件才能成功调用 TForm 或其后代成员?

谢谢

最佳答案

不支持在主线程以外的线程中调用 VCL 方法。

您需要找到一种方法将所有 VCL 访问保留在主线程中。一种常用的技术是 Synchronize() 方法。您还可以发送窗口消息,因为它们将始终被编码到拥有该窗口的线程。

我想它在 C++ Builder 中和在 Delphi 中是一样的,但在 Delphi 中最好调用 BeginThread() 而不是 CreateThread()BeginThread()CreateThread() 的轻量级包装,但它为您做的主要事情是设置 IsMultiThread 全局变量。如果您坚持要调用 CreateThread(),则必须先将 IsMultiThread 设置为 true。

关于c++ - 从 win32 线程调用 TForm 的成员应该满足什么条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180292/

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