我有一个实现com服务器的Delphi7程序。最近,由于一些新的数据库查询,程序初始化完成的时间有所增加。我所说的程序初始化是指程序能够以有意义的方式处理传入的com调用所需的时间。我的问题是,当程序还没有正确初始化时,我如何处理传入的com调用。丢弃调用中包含的信息不是一个选项,调用需要等待程序初始化。使用布尔初始化变量的一个简单的while循环就足够了吗?我之所以这样问,是因为我读到com调用是在主VCL线程中执行的,这意味着while循环会导致程序挂起(初始化也发生在VCL线程中)。
Mutexes不能用来等待代码在同一线程中执行,对吧?
换句话说,com是否调用中断(com服务器的) VCL线程的执行,直到它完成,或者同一线程中代码的并发执行是如何工作的?谢谢你抽出时间来。
发布于 2012-11-18 01:14:23
将数据库逻辑移出主线程,使其不再被阻塞。
发布于 2013-07-12 20:43:47
COM服务器(EXE)在将控制流返回到COM客户端之前等待Applcation.Run,因此所有窗体和数据模块都应初始化。
但是,当窗体创建另一个OLE对象(即在FormCreate()事件处理程序中打开Word doc )时,这可能会中断等待并立即将控制返回给COM客户端。
尝试检查在Applcation.Run之前创建的表单的所有初始化代码,以定位问题。
https://stackoverflow.com/questions/13431091
复制相似问题