gpt4 book ai didi

multithreading - 如何在 Delphi 中创建具有自己的消息处理循环的第二个 UI 线程?

转载 作者:行者123 更新时间:2023-12-03 15:41:05 28 4
gpt4 key购买 nike

我正在开发带有嵌入式脚本的 VCL (Delphi Win32) 表单应用程序平台,并希望添加调试支持。脚本在主 VCL 线程中执行 - 脚本执行直接 UI 操作,并且具有一些其他遗留约束将其保留在 UI 线程中。

调试器 UI 需要在自己的线程中运行,因为主 UI 线程将在脚本断点处阻塞。它仍然需要位于同一进程中,线程安全调试组件才能工作。

我试图关注Blorgbeard对https://stackoverflow.com/a/12505959/243144的评论,但我不确定 Delphi 的 VCL 是否可以实现这一点。 (.NET 在将表单传递给 Application.Run 时创建一个新的 ApplicationContext)使用以下 Delphi,阻塞主 UI 线程会停止第二个线程上的消息处理(反之亦然)。

procedure TDebuggerThread.Execute;
begin
CoInitialize(nil);

FForm := TForm2.Create(nil);
FForm.Show;
Application.Run;
end;

最佳答案

Delphi 表单仅是单线程的。 TControl 的任何后代(包括 TForm)只能从主 UI 线程访问。切勿在主线程以外的任何地方调用任何 TApplication 方法。

您当然可以创建绑定(bind)到不同线程的其他窗口。您只是无法在这些线程中使用 VCL UI 元素。相反,您将使用 CreateWindow 创建主窗口及其上的任何控件。您将编写一个窗口过程来处理发送到这些窗口的任何消息。您将在父窗口过程而不是子窗口过程中处理控制通知消息。

关于multithreading - 如何在 Delphi 中创建具有自己的消息处理循环的第二个 UI 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14840753/

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