gpt4 book ai didi

c++ - 从另一个线程读取标准输入

转载 作者:太空狗 更新时间:2023-10-29 21:07:18 24 4
gpt4 key购买 nike

我在 unix 上的代码中使用 p_threads。在我的主程序中,我有一个线程节点,它有 2 个线程,其中一个正在使用 getline 从标准输入中读取。所有这些工作正常。除了在我的代码中的某个时刻,我必须“重新启动从标准输入读取的线程”。当我这样做时,我无法从标准输入中读取任何内容。

有什么建议我可能做错了吗???/

谢谢。

这是我从标准输入读取的部分

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;

}

最佳答案

您可能正在中止仍连接到标准输入的线程,请记住您在执行 getline 时中止了线程。

现在我不知道是否有办法获取标准输入指针并释放它以便能够获取更多行,但可能有一种方法可以继续读取前一个线程已经读取的行。

你需要做的是:

  • 在进入 getline 时使用共享标志并将其设置为 true
  • 将您读取的变量设置为静态变量,除了需要重新启动的线程外,永远不要在任何线程中对其使用 getline
  • 重建新线程时,如果进入 getline 的标志为真,则不要调用 getline
  • 完成获取线后重置 bool 标志
  • 使用锁定来防止读取行标志上的并发访问

当您需要该值时,只需使用您用来传递给 getline 的静态变量即可。

关于c++ - 从另一个线程读取标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com