2016-11-26 43 views
-2

我有一个线程(线程A):如何醒来C “函数getline” 在CIN ++

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

在启动程序isOpen = true;,在另一个线程(线程B)我设置isOpen为false。

我想问你,如何唤醒THREAD A,这是睡眠getline?

我的想法是发送空字符串到cin,但怎么样?

谢谢你的帮助。

FULL示例代码:

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功能应该是sleepunistd.h,请注意,它以秒为单位进行计数,而不是以ms为单位。 请注意,线程A可能不会达到getline函数,因为它立即在if(isOpen==true){break;}中断。