Multithreading Delphi7如何使Com对象等待程序初始化完成?

Multithreading Delphi7如何使Com对象等待程序初始化完成?,multithreading,delphi,com,initialization,delphi-7,Multithreading,Delphi,Com,Initialization,Delphi 7,我有一个Delphi7程序,它实现了一个com服务器。最近,由于一些新的数据库查询,程序初始化完成的时间有所增加。我所说的程序初始化是指程序能够以有意义的方式处理传入的com调用所需的时间。 我的问题是,当程序尚未正确初始化时,如何处理传入的com调用。放弃通话中包含的信息不是一个选项,通话需要等待程序初始化。 使用布尔初始化变量的简单while循环是否足够? 我这样问是因为我读到com调用是在主VCL线程中执行的,这意味着while循环会导致程序挂起(初始化也发生在VCL线程中) 互斥锁不能用

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

互斥锁不能用于等待代码在同一线程内执行,对吗

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

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

COM服务器(EXE)等待应用程序。在将控制流返回COM客户端之前运行,因此应初始化所有窗体和数据模块

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


尝试检查应用程序之前创建的表单的所有初始化代码。运行以定位问题。

COM不介意等待。你为什么要帮忙?但是如果com调用在vcl线程内执行,并且初始化在vcl线程内进行,那么while循环是否会阻止该线程并导致初始化永远不会完成?当windows启动包含com服务器的delphi程序时,在调用com函数之前执行哪些部分(初始化部分、表单创建)?如果我知道这一点,那么我可以确保在初始化完成之前永远不会执行com函数。初始化依赖于在GUI上显示信息。如果我将它移动到另一个线程,我将需要调用synchronise(我猜)或使用消息来避免访问冲突,因为VCL组件不是线程安全的(不确定该部分,但我理解VCL是如何工作的)。如果这个前提是正确的,那么这两种机制不会因为VCL线程卡在com调用中而挂起程序吗?嗯,或者我可以使用互斥并等待。。。在这种情况下?然后将初始化与UI分离。让初始化将信息存储在内存中的某个位置并继续,然后让UI拾取该信息并在空闲时显示它。