小编Zib*_*las的帖子

为什么不在dll中调用threadTerminate

我有一个问题,与普通应用程序中的相同代码相比,我的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.

delphi dll

8
推荐指数
1
解决办法
432
查看次数

穿上正确的选择?

我是线程新手,因此我不确定线程​​是否是解决此问题的正确方法.

我的程序需要执行几次计算,后面跟logik相同,但参数不同.计算时间越长,它就越接近完美的答案.计算持续时间不能在之前测量(从几秒钟到几分钟)

用户希望在某些时间按顺序(从计算1到X)得到结果.只要他得到一个结果,他就不满足于完美的解决方案.一旦他有了解决方案,他就不会对之前的那个感兴趣(例如:他有一个不完美的答案来自计算1并且现在要求从计算2回答;即使现在有更好的答案计算1,他也不感兴趣在里面)

穿线是正确的方法吗?

delphi multithreading

2
推荐指数
1
解决办法
178
查看次数

标签 统计

delphi ×2

dll ×1

multithreading ×1