簡體   English   中英

從另一個線程讀取stdin

[英]Reading stdin from another thread

我在unix上的代碼中使用了p_threads。 在我的主程序中,我有一個線程節點,它創建了2個線程,其中一個線程使用getline從標准輸入讀取。 所有這一切都很好。 除了在我的代碼中的某些時候,我必須“重新啟動從標准輸入讀取的線程”。 當我這樣做時,我無法從標准輸入中讀取任何內容。

我有什么建議可能做錯了???

謝謝。

這是我從stdin讀取的部分

void* parseCmd(void* s) 
{

    sigset_t new2; 
    struct sigaction act; 
    sigemptyset(&new2); 
    sigaddset(&new2,SIGINT); 
    pthread_sigmask(SIG_UNBLOCK, &new2, NULL); 

    act.sa_handler = interrupt; 
    sigaction(SIGINT, &act, NULL); 
    signal(SIGUSR1, signal_Handler);

    std::string input("");
    while (1) 
    {

       std::cout << "SERVANT > ";
       std::getline(std::cin, input);

       doTheWork(input);
       cin.clear();

       std::cout << std::endl;

      if(global_shutdown==1 || auto_global_shutdown==1)
        break;
    }


    cout<<"cmd thread exit.Main\n"; 
    return 0;

}

您可能正在中止仍然連接到標准輸入的線程,請記住您在執行getline時中止了線程。

現在我不知道是否有辦法獲取標准輸入指針並釋放它以獲得更多行但是可能有一種方法可以繼續讀取前一個線程已讀取的行。

你需要做的是:

  • 進入getline時使用共享標志並將其設置為true
  • 將您讀取的變量設置為靜態變量,除了需要重新啟動的線程外,不要在任何線程中使用getline
  • 當你重建新線程時,如果輸入getline的標志為true,則不要調用getline
  • 完成行重置布爾標志后
  • 使用鎖定來防止讀取線標志上的並發訪問

當您需要該值時,只需使用您用於傳遞給getline的靜態變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM