eclipse 中的 c++ makefile 项目 - select() 在 stdin 中返回速度异常快

标签 c++ eclipse stdin

我的 Eclipse 项目是一个带有 makefile 项目的 C++。在 makefile 的末尾,有一个对可执行文件的调用,就像从终端一样。 (./myEXE)

这个程序应该在运行时接受来自终端的命令(这是一个使用 MPI 的物理模拟,可以在模拟运行时输入“stop”或“stats”或“stop”命令)。

输入(不是我的原始代码)是用 select()(例如来自库 sys/types,this)来查看是否有任何可从标准输入读取的内容。 select() 的超时选项确保 MPI 有时间启动。尝试读取输入一段时间后,它将检查 MPI 工作负载是否有进展,如果没有,则会引发超时错误。

当我从终端调用 makefile 时,一切都很顺利。当试图从 Eclipse 运行时它坏了(shift+F9 等等...)

问题似乎在于 stdin 始终是可读的,因此在它有可能启动模拟之前检查 MPI - select() 在 <1ms 后返回。

因此,我的两个主要问题是:

  • Eclipse 从哪里读取标准输入?
  • 为什么它总是可读的?

附言由于程序是通过 makefile 中的 MPI 调用的,而不是直接从 Eclipse 中调用的,因此调试它有点棘手....

最佳答案

selectstdin 是可读的,你必须确保在再次调用 select 之前改变它的状态,否则它只会返回立即地。您的代码不会更改其状态,而只是再次调用 select,导致它永远循环。

您应该如何修复它取决于 stdin 被关闭是否是您程序的致命条件。如果您的程序必须有一个有效的 stdin 才能继续,那么如果它在读取 stdin 时收到 EOF,它应该终止,而不仅仅是保持 select盲目地。如果您的程序即使没有有效的 stdin 也能继续有用地运行,那么如果它关闭或出错,它应该将其从 select 集中删除。 (或停止调用 select,具体取决于逻辑。)

但是你不能就这么不管,就当什么都没发生一样继续跑。

关于eclipse 中的 c++ makefile 项目 - select() 在 stdin 中返回速度异常快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25894360/

相关文章:

java - JADE 中间件的移动性

c++ - 错误的文件描述符 - 双 I/O 重定向

c++ - 在循环中用作 "const &"函数参数的临时对象的编译器优化?

c++ - 遗产。从父类调用子类函数

java - 我在 eclipse 中为 spring mvc web 应用程序选择什么项目类型?

c - 使用 scanf 从标准输入 C 读取文件

linux - 为什么 cat 0>file 不起作用

c++ - 使用 namespace 别名优于预处理器的好处

python - PyEval_GetLocals 返回全局变量?

java - 使用资源为 Swing 项目创建安装防护