我有一个帖子(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;
}
我没有编译这段代码,我是从手机编写的,可能会有一些语法错误,......
答案 0 :(得分:0)
首先,如果你的Sleep
函数应该是来自sleep
的{{1}},请注意它以秒为单位,而不是ms。
请注意,线程A可能无法到达unistd.h
func,因为它会立即在getline
中断。