2013-10-21 74 views
2

後才輸出我有以下d程序:Eclipse控制檯寫程序完成

void main(string[] args) 
{ 
    import core.thread, std.stdio; 

    for (int i = 10; i > 0; --i) 
    { 
     writeln(i); 
     Thread.sleep(dur!"seconds"(1)); 
    } 
    writeln("Bang!"); 
} 

它從10向下計數到1,然後輸出"Bang!"。在每個輸出之間,程序等待一秒的時間。當我使用DDT插件(版本:0.8.1.v201309231)在Eclipse(Eclipse平臺,版本:3.8.1,Build id:debbuild)中運行此程序時,控制檯輸出如預期的那樣,但只有在程序已經結束運行。

當我從控制檯啓動相同的程序時,程序的行爲應該與它應該一樣。

我該如何解決這個問題?

+1

嘗試把stdout.flush();睡前。不知道是否日食也會沖洗,但值得一試 –

回答

7

將stdout.flush放在睡眠線之前。 stdout被緩衝,所以flush可以確保它實際上到達設備而不是在緩衝區中等待。

+0

我一直認爲stdout是行緩衝的... – DejanLekic

+1

我不完全確定這裏發生了什麼,但我認爲行緩衝只發生在接收端是常規終端。否則,它會獲得與其他文件相同的緩衝區(因爲它可能*是任何其他文件)。對於Eclipse,我再次猜測,它可能是通過管道與eclipse進程通信,而不是作爲交互式終端進行註冊,因此它可以恢復爲完全緩衝。 –

+0

是的,好像是這樣的... – DejanLekic