Multithreading 创建线程打印错误后在控制台中写入

Multithreading 创建线程打印错误后在控制台中写入,multithreading,console,pascal,lazarus,Multithreading,Console,Pascal,Lazarus,使用writeLn后,我在控制台中看到的文本有问题 我的代码: (...) procedure TTestApp.Run; var MyThread:TMyThread; begin writeLn('Start new program'); writeLn('Start new thread'); MyThread:=TMyThread.Create; sleep(1000); writeLn('Next part of program'

使用writeLn后,我在控制台中看到的文本有问题

我的代码:

(...)

procedure TTestApp.Run;
var
  MyThread:TMyThread;
begin

    writeLn('Start new program');

    writeLn('Start new thread');

    MyThread:=TMyThread.Create;

    sleep(1000);

    writeLn('Next part of program');

    end;


var
  TestApp: TTestApp;
begin

  TestApp := TTestApp.Create;
  TestApp.Run;
  TestApp.Free;
end.              
使用此代码后,我在控制台中没有得到我所期望的。我得到:

Start new program.
Start new thread
New thread started
Start new thread
但我希望:

Start new program.
Start new thread
New thread started
Next part of program.
MyThread只需使用writeLn并打印“新线程已启动”:

你能帮我吗?我做错了什么


看起来在创建新线程后,我无法从TestApp在控制台上打印。通过一些猜测运行

,我制作了一个编译示例,但它在我的设置中按预期工作

因此有两种可能性:

  • 您正在使用的Lazarus的特定版本有一个bug
  • 你编译的代码和我猜的不一样。因此,请发布一个完整的编译示例来排除这种可能性

经过一些猜测,我制作了一个编译示例,但它在我的设置中工作正常

因此有两种可能性:

  • 您正在使用的Lazarus的特定版本有一个bug
  • 你编译的代码和我猜的不一样。因此,请发布一个完整的编译示例来排除这种可能性


由于您没有显示所有代码,因此很难猜测发生了什么。FPK试图根据您发布的内容重新构建整个代码,他/她得到的结果与我在Delphi中得到的结果以及您期望的结果相同。这个“无限的东西”可能(直接或间接地)开始了一个新的线程吗?是的,这个“无限的东西”开始了一个新的线程。那你为什么不知道呢?请注意,循环退出时不会显示任何内容。创建新线程后,应在控制台中打印“程序的下一部分”,但不会。在“无限的东西”中,我开始新的线程,但这是不同的线程,不要在控制台中打印任何内容。正如我在回答中所说的:请发布一个完整的示例,以便我们能够找出问题所在。因为您没有显示所有代码,所以很难猜测发生了什么。FPK试图根据您发布的内容重新构建整个代码,他/她得到的结果与我在Delphi中得到的结果以及您期望的结果相同。这个“无限的东西”可能(直接或间接地)开始了一个新的线程吗?是的,这个“无限的东西”开始了一个新的线程。那你为什么不知道呢?请注意,循环退出时不会显示任何内容。创建新线程后,应在控制台中打印“程序的下一部分”,但不会。在“无限的东西”我开始新的线程,但这是不同的线程,不打印任何东西在控制台中。正如我在回答说:请张贴一个完整的例子,这样我们可以找出问题所在。谢谢,我会尝试安装一些nowe版本。我宁愿好好看看我的代码。似乎有些事情你没有显示出来,这可能会导致你看到的奇怪效果。我确信这在我的代码中,但我找不到;)@Mlody87:如果你找不到它,而你面前有代码,当我们没有所有的代码时,你希望我们如何找到它?编辑您的问题,提供我们可以使用的完整MCVE,我们可能会提供帮助。适用于我的FPC 3.0.0 Win32谢谢,我将尝试安装一些nowe版本。我宁愿仔细查看我的代码。似乎有些事情你没有显示出来,这可能会导致你看到的奇怪效果。我确信这在我的代码中,但我找不到;)@Mlody87:如果你找不到它,而你面前有代码,当我们没有所有的代码时,你希望我们如何找到它?编辑您的问题,提供我们可以使用的完整MCVE,我们可能会提供帮助。适用于我FPC 3.0.0 win32
 TMyThread = class(TThread)
  protected
      procedure Execute; override;
      public
          constructor Create;
  end;

    constructor TMyThread.Create;
    begin
        inherited Create(false);
    end;


procedure TMyThread.Execute;
var
quit:boolean; 
begin
      FreeOnTerminate := False;

      writeLn('New thread started');

      quit:=false;
      repeat
      //some infinite stuff
      until quit;       

end;