我有一个实现com服务器的Delphi7程序。由于一些新的数据库查询,最近程序初始化完成的时间有所增加。程序初始化的意思是程序能够以有意义的方式处理传入的COM调用所需的时间。 我的问题是,当程序尚未正确初始化时,我如何处理传入的COM调用。丢弃呼叫中包含的信息不是一种选择,呼叫需要等待程序初始化。 使用布尔初始化变量的简单while循环是否足够? 我问,因为我读到com调用是在主VCL线程中执行的,这表明while循环会导致程序挂起(初始化也发生在VCL线程中)。
互斥锁不能用于等待在同一个线程内执行的代码,对吗?
换句话说,com调用中断执行(com服务器的)VCL线程直到它完成或者同一个线程中的代码并发执行如何工作? 感谢您抽出宝贵时间。
答案 0 :(得分:1)
将数据库逻辑移出主线程,使其不再被阻止。
答案 1 :(得分:0)
COM服务器(EXE)在将控制流返回给COM客户端之前等待Applcation.Run,因此应初始化所有表单和数据模块。
但是,当表单创建另一个OLE对象(即在FormCreate()事件处理程序中打开Word文档)时,这可能会立即中断等待并将控制权返回给COM客户端。
尝试检查在Applcation.Run之前创建的表单的所有初始化代码以本地化问题。