D
dirk
Unregistered / Unconfirmed
GUEST, unregistred user!
主框架程序是VC写的,无源码,dll由delphi写,导出stdcall函数供主程序调用,线程是由dll调用执行。
在dll中创建线程,主要代码:
constructor Taaa.CreateIt(frm: TFormBase);
begin
inherited Create(true);
FormBase_A := frm;
Priority := tpNormal;
FreeOnTerminate := true;
end;
procedure Taaa.Execute;
begin
inherited;
Synchronize(aaa);
end;
aaa是taaa的一个private过程
dll中创建、执行线程代码:
bb := taaa.CreateIt(self);
bb.Resume ;
如果是delphi写的程序,这样执行线程没有问题,bb.Resume之后,执行Taaa.Execute,Synchronize(aaa),然后taaa.aaa方法就会被执行,然后线程执行完毕、自动释放。
但是这个dll被VC写的主程序调用后,bb.Resume之后,会执行到Taaa.Execute的Synchronize(aaa)后,taaa.aaa方法不会被执行,线程也一直挂着,后来试了几次,发现要taaa.aaa方法被执行,必须在bb.Resume之后加个ShowMessage(''),taaa.aaa就执行了,然后就正常释放。
很奇怪,似乎要个ShowMessage('')“顶”一下才会执行,所以,考虑到delphi线程类的Synchronize机制,想请教一下,在VC写的程序中,要正常执行delphi写的dll中创建的线程,是否有什么要注意的(线程是由dll调用执行)?
最好懂VC的帮忙看一下。
在dll中创建线程,主要代码:
constructor Taaa.CreateIt(frm: TFormBase);
begin
inherited Create(true);
FormBase_A := frm;
Priority := tpNormal;
FreeOnTerminate := true;
end;
procedure Taaa.Execute;
begin
inherited;
Synchronize(aaa);
end;
aaa是taaa的一个private过程
dll中创建、执行线程代码:
bb := taaa.CreateIt(self);
bb.Resume ;
如果是delphi写的程序,这样执行线程没有问题,bb.Resume之后,执行Taaa.Execute,Synchronize(aaa),然后taaa.aaa方法就会被执行,然后线程执行完毕、自动释放。
但是这个dll被VC写的主程序调用后,bb.Resume之后,会执行到Taaa.Execute的Synchronize(aaa)后,taaa.aaa方法不会被执行,线程也一直挂着,后来试了几次,发现要taaa.aaa方法被执行,必须在bb.Resume之后加个ShowMessage(''),taaa.aaa就执行了,然后就正常释放。
很奇怪,似乎要个ShowMessage('')“顶”一下才会执行,所以,考虑到delphi线程类的Synchronize机制,想请教一下,在VC写的程序中,要正常执行delphi写的dll中创建的线程,是否有什么要注意的(线程是由dll调用执行)?
最好懂VC的帮忙看一下。