我有一个问题,与普通应用程序中的相同代码相比,我的dll中的代码表现不同.经过一些调试后,我发现线程的OnTerminate永远不会在dll中调用.
type
TTest = class
private
public
procedure threadStart();
procedure threadEnd(Sender: TObject);
procedure lines(value: String);
end;
procedure TTest.threadStart();
var aThread : TThread;
begin
aThread :=
TThread.CreateAnonymousThread(
procedure
begin
lines('start')
end
);
aThread.FreeOnTerminate := True;
aThread.OnTerminate := self.threadEnd;
aThread.Start;
end;
procedure TTest.threadEnd;
begin
lines('end')
end;
procedure TTest.lines(value: String);
var MyText: TStringlist;
begin
MyText:= TStringlist.create;
MyText.Add(value);
MyText.SaveToFile('.\filename.txt');
MyText.Free
end;
Run Code Online (Sandbox Code Playgroud)
如果我从普通的VLC Delphi应用程序运行此代码,我会在文本文件中结束.如果我从dll运行相同的代码(将其加载到静态或动态到VLC应用程序),我开始在文本文件中.
我的问题:为什么?或者更好的问一下,我怎么能让我的dll和我的VLC一样.我正在使用的当前版本是XE7.
我是线程新手,因此我不确定线程是否是解决此问题的正确方法.
我的程序需要执行几次计算,后面跟logik相同,但参数不同.计算时间越长,它就越接近完美的答案.计算持续时间不能在之前测量(从几秒钟到几分钟)
用户希望在某些时间按顺序(从计算1到X)得到结果.只要他得到一个结果,他就不满足于完美的解决方案.一旦他有了解决方案,他就不会对之前的那个感兴趣(例如:他有一个不完美的答案来自计算1并且现在要求从计算2回答;即使现在有更好的答案计算1,他也不感兴趣在里面)
穿线是正确的方法吗?