我在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;
}
答案 0 :(得分:4)
您可能正在中止仍然连接到标准输入的线程,请记住您在执行getline时中止了线程。
现在我不知道是否有办法获取标准输入指针并释放它以获得更多行但是可能有一种方法可以继续读取前一个线程已读取的行。
您需要做的是:
当您需要该值时,只需使用您用于传递给getline的静态变量。