gpt4 book ai didi

delphi - ActiveX在Delphi中阻止VCL线程

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

遇到一个奇怪的问题:

我正在使用delphi 6.0,并试图集成第三方activex控件,该控件可连接到服务器,进行流传输和呈现视频(此控件无可见性)。

该控件的帧速率设置为1-30,如果我将其设置为一个较小的值(如1),则VCL线程似乎每秒阻塞一秒钟。

换句话说,似乎在ActiveX控件中完成视频渲染后,它会休眠一段时间,直到需要渲染下一帧为止,但这是我的推测。

查看注册表,我发现此控件是Apartment线程,因此我认为必须发生的方式是我在VCL线程上创建了控件,因此控件内的渲染线程被编码为在VCL线程上运行(doesn “实际上,将控件内部的线程编码不是很有意义吗?),并且由于某些 sleep 逻辑,它会导致VCL线程阻塞。

基于此,我认为如果我创建了一个专用线程来创建此控件(带有隐藏的窗口和消息泵),则将在此ActiveXCreatorThread而不是VCL上进行 sleep 。使用CreateParented(Fowner)创建activex控件。

不用说这是行不通的,VCL线程继续以相同的方式阻塞,我感到困惑。您认为是什么导致了原始行为?为什么我的骇客无法使用?

谢谢!

最佳答案

我的猜测是,因为这是一个带有用户界面的控件,它总是以某种方式在主UI线程中执行。不确定使用ActiveX如何完成此操作,但是由于UI需要由一个线程更新,因此可以肯定它需要以这种方式发生。

不确定有什么帮助。我能想到的唯一解决方法是在单独的exe中运行控件。

关于delphi - ActiveX在Delphi中阻止VCL线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2291237/

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