如何在c ++中唤醒cin上的“getline”

时间:2016-11-26 13:18:26

标签: c++ multithreading cin getline

我有一个帖子(THREAD A):

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

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

我想问你,如何唤醒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;
}

我没有编译这段代码,我是从手机编写的,可能会有一些语法错误,......

1 个答案:

答案 0 :(得分:0)

首先,如果你的Sleep函数应该是来自sleep的{​​{1}},请注意它以秒为单位,而不是ms。 请注意,线程A可能无法到达unistd.h func,因为它会立即在getline中断。