2014-01-09 35 views
1
Poco::Pipe outputPipe; 
    Poco::Pipe errorPipe; 
    Poco::Process::Env env; 
    Poco::Process::Args arg; 
    Poco::Process::launch(exeFile, arg, workDir, 0 , &outputPipe, &errorPipe, env); 

我用上面的代碼創建兩個過程,一個是對的,另一種是錯誤的。然後我改變了代碼將一個進程標準輸出重定向到管道會產生不同的運行結果?

Poco::Process::launch(exeFile, arg, workDir, 0 , 0, 0, env); 

唯一的區別是,我不重定向輸出和錯誤來管。然後我創建了兩個進程,現在沒事了。

在我看來,我覺得dont't重定向輸出和錯誤會導致不同的結果運行的進程。這樣對嗎?

如果我錯了,什麼情況下會產生變化?

謝謝。

回答

1

至少有兩個方面的變化可以有所作爲:

  1. 你不顯示讀取管道中的代碼。如果其中一個管道在讀取代碼讀取數據之前填充,則啓動的進程將阻止寫入管道,直到從管道讀取數據。

  2. 當輸出(具體地)是一個管,該輸出可能被充分緩衝,而不是行緩衝的或未緩衝的。這可能意味着輸出不像未示例中那樣迅速出現。你的程序可能會寫一條線,然後做一些工作,然後寫另一條線路,但這些都不是必然發送到進程讀取管道(除非應用程序刷新輸出,或設置行緩衝輸出模式)。

+0

你說得對。我的代碼讀取管道是錯誤的,所以管道填充和啓動的進程塊。謝謝 – leezii

相關問題