2016-11-26 3 views
-2

Я одна нить (НИТИ A):Как проснуться "GetLine" над КИН в C++

while (true) { 
    if (isOpen)) { 
     break; 
    } 
    string line = ""; 
    getline(cin,line); 
    std::cout << line << "\n"; 
} 

При запуске программы isOpen = true;, в другом потоке (НИТИ B) Я установить isOpen ложь.

Я хочу спросить вас, как просыпаться THREAD A, который сжимается над getline?

Моя идея отправлена ​​пустая строка в cin, но как?

Благодарим за помощь.

ПОЛНЫЙ ПРИМЕР КОД:

using namespace std; 
#include <thread> 

bool isOpen = true; 

void test() { 
    Sleep(10000); //sleep for 10s 
    isOpen = false; //break loop 
} 

int main() { 
    std::thread* _t = new std::thread(test); //start thread B 
    while (true) { 
     if (isOpen==true) { 
      break; 
     } 
     string line = ""; 
     getline(cin,line); 
     std::cout << line << "\n"; 
    } 
    return 0; 
} 

Я не компилируется этот код, я пишу с мобильного телефона, могут быть некоторые синтаксические ошибки, ...

+0

@RawN Я добавляю полный пример – makubas

ответ

0

Прежде всего, в случае, если ваш Sleep функция должна быть sleep от unistd.h, обратите внимание, что она рассчитывается в секундах, а не в мс. Обратите внимание, что поток A, вероятно, не достигнет getline func, так как он немедленно разбивается на if(isOpen==true){break;}.