请教:VC写的主程序,delphi写的标准dll,在dll中创建线程需要注意哪些问题?(300分)

  • 主题发起人 主题发起人 dirk
  • 开始时间 开始时间
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的帮忙看一下。
 
参考:http://blog.csdn.net/formiss/archive/2007/04/10/1559127.aspx
解决方案1:就是在DLL中再建立个消息循环(ShowMessage出来的窗口就有消息循环)
2:不用DELPHI的线程类,用API建立线程
 
后退
顶部