在我編寫的程序中,我有一個主線程,它包含一個用於接受控制檯輸入的循環。但是,在某個時候會創建一個新的線程,該線程也會嘗試從stdin讀取。有一個變量表示這個其他線程已經啓動,但是fgets仍然在等待主線程中的輸入,所以在新線程啓動後輸入的第一個控制檯輸入被主線程而不是新線程錯誤地讀取。我怎樣纔能有一個新的線程「接管」標準輸入?
有沒有辦法解決這個問題?
有一件事我已經試過是(在主線程):
while(foo) {
if(busy) continue;
fgets(input,200,stdin);
if(busy) {
fputs(input,stdin);
} else {
// do whatever was supposed to be done with input intended for main thread
}
}
但我似乎因爲其他與fgets調用不讀通過的fputs寫入的數據流是如何工作的一種誤解。
你爲什麼要這麼做?你確定沒有更好的設計將所有的I/O保持在同一個線程上嗎? –
這將是理想的。我想我在看樹林的時候遇到了麻煩。 我會嘗試。 – Tiki