2016-03-05 47 views
0

我在使用writeLn後在控制檯中看到了文本問題。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和打印 「新線開始」:

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; 

你能幫助我嗎?我做錯了什麼?

它看起來像創建新的線程,我不能在控制檯上打印從TestApp.Run

+0

由於您沒有顯示所有代碼,因此很難猜測發生了什麼。 FPK試圖從您發佈的內容中重新構建完整的代碼,並且他/她在Delphi中獲得的結果與您期望的相同。這種「無限的東西」可能(直接或間接)開始一個新的線程? –

+0

是的,這個「無限的東西」開始一個新的線程。 – Mlody87

+0

那你爲什麼想知道?請注意,當循環退出時,什麼都不顯示。 –

回答

2

有了一些猜測我做了一個編譯例子之後,但它的工作原理與我的設置預期。

因此,有兩種可能性:

  • 拉撒路的特定版本使用的是有一個bug。
  • 你編譯的代碼與我猜的不一樣。所以請發佈一個完整的編譯示例來排除這一點。
+0

謝謝,我會嘗試安裝一些nowe版本。 – Mlody87

+1

我寧願仔細看看我的代碼。似乎有什麼事情沒有出現,哪些可能會導致你看到的奇怪效果。 –

+0

我敢肯定,這是在我的代碼,但我不能找到這個;) – Mlody87