2

我有一个实现 com 服务器的 Delphi7 程序。最近,由于一些新的数据库查询,程序初始化完成的时间有所增加。我所说的程序初始化的意思是程序能够以有意义的方式处理传入的 com 调用所需的时间。我的问题是当程序尚未正确初始化时如何处理来电。丢弃调用中包含的信息不是一种选择,调用需要等待程序初始化。使用布尔初始化变量的简单 while 循环是否足够?我问是因为我读到 com 调用是在主 VCL 线程中执行的,这表明 while 循环会导致程序挂起(初始化也在 VCL 线程中进行)。

互斥锁不能用于等待在同一个线程中执行的代码,对吧?

换句话说,com 调用是否会中断(com 服务器的)VCL 线程的执行,直到它完成,或者在同一线程中并发执行代码是如何工作的?感谢您抽出宝贵的时间。

4

2 回答 2

1

将您的数据库逻辑移出主线程,使其不再被阻塞。

于 2012-11-17T17:14:22.850 回答
0

COM 服务器 (EXE) 在将控制流返回给 COM 客户端之前等待 Applcation.Run,​​因此所有的表单和数据模块都应该被初始化。

然而,当一个窗体创建另一个 OLE 对象(即在 FormCreate() 事件处理程序中打开 Word 文档)时,这可能会中断等待并将控制权立即返回给 COM 客户端。

尝试检查在 Applcation.Run 之前创建的表单的所有初始化代码以定位问题。

于 2013-07-12T12:43:46.890 回答