2013-07-14 75 views
2

我對線程非常陌生,並且正在嘗試創建一個基本的異步輸入程序。螺紋輸入問題

[main.cpp中]:

#include <iostream> 
#include <thread> 
#include <string> 
#include <chrono> 

void ThreadedOutput(void) { 
    while(true) { 
     std::string output="Distracting output!\n"; 
     std::this_thread::sleep_for(std::chrono::seconds(3)); 
     std::cout << output; 
    } 
} 

int main(void) { 
    std::thread active_thread(&ThreadedOutput); 
    active_thread.detach(); 

    std::string input; 

    while(input!=std::string("password")) { 
     std::cin >> input; 
    } 

    return 0; 
} 

的這個目的是打印輸出,同時用戶正在輸入文本。 但是,它將輸出打印到輸入線上,這會干擾輸入。 有沒有辦法讓它在輸入行上面打印?

截圖: incorrect

+1

你用std :: mutex保護共享資源。控制檯也不例外。 –

+0

互斥鎖在其他線程正在使用它們時阻塞資源,對嗎?然而,我正在嘗試與cin同時使用cout。 – object

+0

不,互斥塊*代碼*嘗試使用不是線程安全的共享資源。巨大差距。所以如果你正確地使用它,那麼你可以防止你的cout語句在cin尚未返回時執行。在任何有關線程順序的入門書中都有很好的介紹。不要跳過閱讀,線程難以正確,直覺不起作用。 –

回答

0

可以重定向CIN緩衝到一個文件(或其他數據流),然後用COUT顯示它。現在

How to redirect cin and cout to files?

的問題就變成了:如何顯示COUT無干擾?使用一個互斥鎖和一個lock_guard

希望有幫助,