2016-01-16 85 views
1

我想用3個線程(主,讀寫器)編寫簡單的程序。讀線程是類似的東西:異步控制檯輸入凍結了以前的輸入C

char message[128]; 
while (1) { 
    std::cin >> message; 
} 

主要搭線Ctrl+Z動作,然後用戶按下此控件,那麼我想顯示簡單的選擇像Do you want finish? (Y/N) __其中__std::cin行動。現在我有這樣的事情:

void signal_handler(int signal) { 
    char finish; 
    std::cout << "Do you want finish? (Y/N)"; 
    std::cin >> finish; 
} 

int main(void) { 
    signal(20, signal_handler); 
    ... 

但是,當我發出簡單Y首先是要讀線程,現在當我發Y是要主線程。我如何將stdin重定向到主線程?

+1

你在信號處理程序中做得太多了,只需設置一個由程序檢查的標誌即可。也沒有硬編碼信號數字,但使用的名稱。 – Voo

+0

「C」之前的「C」是什麼? –

+0

@UlrichEckhardt對不起,我的錯。我的英語很糟糕:<我更喜歡另一種語言。 – ventaquil

回答

0

標準IO(其中std::cin換行)不能識別線程。

您的多線程應用程序有責任以合理的方式處理資源。

這樣做的一種方法是讓一個線程負責讀取STDIN並推送到由多線程感知抽象代碼控制的內存隊列。然後根據程序邏輯的要求將該資源「鎖定」到所需的線程。