Z
zmxjh
Unregistered / Unconfirmed
GUEST, unregistred user!
由于在 进程外组件 中有大量的耗时操作,这造成在关闭客户程序时,客户程序中建立的 进程外组件将无法 跟随客户程序一起 退出。
我尝试调用 组件 中的 自编的方法来终止,但调用的方法跟本不执行,直到那个耗时的操作完成才执行!不知道是什么原因。
代码如下:
unit uRackAgent;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj, WSElfServerEx_TLB, StdVcl
type
TRackAgent = class(TTypedComObject, IRackAgent)
protected
function Execute: HResult; stdcall;
function Terminate: HResult; stdcall;
private
end;
implementation
uses ComServ,SysUtils;
function TRackAgent.Execute:HResult;
begin
......
{一些很耗时的操作}
WaitForSingleObject(frmMain.hEvent,INFINITE);//为了实现同步...
...........
end;
function TRackAgent.Terminate: HResult;
begin
ShowMessage('Terminate');
Result:=S_OK;
end;
initialization
TTypedComObjectFactory.Create(ComServer, TRackAgent, Class_RackAgent,
ciMultiInstance, tmApartment);
end.
当我调用Execute还没返回,就调用Terminate时,Terminate跟本不执行!
我尝试调用 组件 中的 自编的方法来终止,但调用的方法跟本不执行,直到那个耗时的操作完成才执行!不知道是什么原因。
代码如下:
unit uRackAgent;
{$WARN SYMBOL_PLATFORM OFF}
interface
uses
Windows, ActiveX, Classes, ComObj, WSElfServerEx_TLB, StdVcl
type
TRackAgent = class(TTypedComObject, IRackAgent)
protected
function Execute: HResult; stdcall;
function Terminate: HResult; stdcall;
private
end;
implementation
uses ComServ,SysUtils;
function TRackAgent.Execute:HResult;
begin
......
{一些很耗时的操作}
WaitForSingleObject(frmMain.hEvent,INFINITE);//为了实现同步...
...........
end;
function TRackAgent.Terminate: HResult;
begin
ShowMessage('Terminate');
Result:=S_OK;
end;
initialization
TTypedComObjectFactory.Create(ComServer, TRackAgent, Class_RackAgent,
ciMultiInstance, tmApartment);
end.
当我调用Execute还没返回,就调用Terminate时,Terminate跟本不执行!