遇到一个奇怪的问题:
我正在使用delphi 6.0并尝试集成连接到服务器,流和呈现视频的第三方activex控件(无法看到此控件)。
控件的帧速率设置为1 - 30,如果我将其设置为1这样的小值,则VCL线程似乎每秒阻塞一次。
换句话说,似乎当在这个ActiveX控件中完成视频渲染时,它会暂停一段时间,直到需要渲染下一帧,但这是我的推测。
查看注册表我看到这个控件是单元线程所以我认为必须发生的方式是我在VCL线程上创建了控件,因此控件中的渲染线程被编组在VCL上运行线程(对于要编组的控件内部的线程实际上没有多大意义吗?)以及由于某些休眠逻辑导致VCL线程阻塞。
基于此,我想如果我创建了一个专用线程来创建这个控件(带有一个隐藏窗口+一个消息泵),睡眠将发生在这个ActiveXCreatorThread而不是VCL上。 activex控件是使用CreateParented(Fowner)创建的。
毋庸置疑,这不起作用,VCL线程继续以同样的方式阻止,我感到困惑。您认为导致原始行为的是什么?为什么我的黑客不会工作?
谢谢!
答案 0 :(得分:1)
我的猜测是因为这是一个带有用户界面的控件,它总是以某种方式在主UI线程中执行。不知道如何使用ActiveX实现这一点,但由于UI需要由一个线程更新,因此需要以这种方式实现。
不确定这有多大帮助。我能想到的唯一工作就是在一个单独的exe中运行控件。
答案 1 :(得分:0)
您可能会发现这篇文章很有用:How to debug application’s hang?