2013-10-06 77 views
0

我有一個C++控制檯應用程序,它不斷輸出一些輸出,同時它也接受來自用戶的命令(使用std::cin) - 輸出和輸入發生在不同的線程中。
如果我在寫入文本的同時出現一些輸出,則寫入的文本與應用程序輸出混合在一起。我怎樣才能防止這種行爲? The console防止混合控制檯輸出和書面文本

爲了解決這個問題,我需要顯示的節目一行以上其中文本鍵入的行。我會在Minecraft Bukkit服務器的解決方案中激發自己 - 但是我需要爲C++提供相同的功能。

desired behaviour

+3

那麼,期望的行爲是什麼?發生這種情況很自然。如果你想要一個類似控制檯聊天客戶端(例如'irssi')的東西,可以看看像'ncurses'這樣的庫,而不是試圖用'cin' /'cout'將它打包在一起。 – us2012

+0

你可以使用一些鎖... – Jarod42

+1

@ Jarod42這聽起來不是一個好主意。在一個聊天程序的例子中,這意味着一旦你開始輸入,你就會錯過*全部*新消息,直到你按下回車鍵,然後纔看到它們。 – us2012

回答

0

假設你想要的輸出出現,而東西被類型化,你需要一些屏幕控制設備具有輸出去比輸入區域不同的地方。如果我的任務是實現類似寫這樣的事情,我會刷新我的ncurses體驗。我意識到你在Windows控制檯上,並且我不知道Windows控制檯是否能夠實現所需的屏幕控制。

您可以使用curses功能將自定義流緩衝區綁定到std::cinstd::cout,但它可能不值得。無論如何,這不是微不足道的。

0

有一個名爲pdcurses的ncurses窗口。但是,如果您使用的是Visual Studio,則提供了一個簡單的函數SetConsoleCursorPosition()

+1

我可以使用該函數將光標放在'std :: cout's輸出下面一行? –