【发布时间】:2020-01-15 10:21:02
【问题描述】:
我有一个多线程程序,其中一个线程通过终端等待输入,另一个将从套接字获取数据。有什么方法可以中止第一个线程 cin/scanf 从第二个线程打印控制台数据。
我想杀死第一个线程,从第二个线程打印数据然后再次运行第一个线程。但我正在寻找一种更好的方法,比如 abort cin 然后重新唤醒它。
void thread1(){
cin>>string;
doSomething();
}
void thread2(){
cout<<getSomeData();
}
在通常情况下,它不会打印数据,直到从键盘输入内容。
[编辑]
我找到了一个特殊的解决方案,比如如果它没有得到输入就会中断,一切都是用 C 风格完成的。 无论如何,如果您有兴趣,请查看“Head First C”一书,“进程间通信:谈话很好”部分。
【问题讨论】:
-
不,通过标准库函数的输入是阻塞的,没有标准(从 C 或 C++ 角度)中断它们的方式。如果您想要“可中断”输入,那么您需要转向操作系统并使用某种非阻塞输入机制,或轮询输入(和中断)。
-
发送信号可用于中断阻塞系统调用。我不知道
std::cin的实现如何处理这个问题,即它是重新启动,还是以失败/错误状态返回。 -
没有标准的 C++ 方式,但可能是特定于平台的方式。你的平台是什么?
-
Raspberry pi3 与 raspbian
标签: c++ multithreading io