select()中的c++makefile项目在stdin中的返回速度异常快
c++ makefile project in select() returns strangely fast in stdin
我的Eclipse项目是一个带有makefile的C++项目。在makefile结束后,会有一个对可执行文件的调用,就像从终端调用一样。(./myEXE)
该程序预计在运行时接受来自终端的命令(这是一个使用MPI的物理模拟,在模拟运行时可以输入"停止"、"统计"或"停止"命令)。
输入是用select()
(例如,来自库sys/types)编写的(而不是我的原始代码),以查看stdin中是否有可读内容。select()的超时选项确保MPI有时间启动。在尝试读取输入一段时间后,它将检查MPI工作负载是否进展,如果没有,它将引发超时错误。
当我从终端调用makefile时,一切都像一个符咒。当尝试从Eclipse运行时(shift+F9等等…)被破坏
问题似乎是stdin总是可读的,因此在MPI有可能启动模拟之前对其进行检查——select()
在<1毫秒。
因此,我的两个主要问题是:
- Eclipse从哪里读取stdin
- 为什么它总是可读的
附言:由于该程序是通过makefile中的MPI调用的,而不是直接从Eclipse调用的,因此调试所有程序有点棘手。。。。
当select
表示stdin
可读时,必须确保在再次调用select
之前更改其状态,否则它将立即返回。您的代码不会更改其状态,而是再次调用select
,使其永远循环。
应该如何修复它取决于stdin
关闭是否是程序的致命条件。如果你的程序必须有一个工作的stdin
才能继续,那么如果它在读取stdin
时得到EOF,它应该终止,而不仅仅是让select
盲目地运行。如果您的程序即使没有工作的stdin
也能继续有效地运行,那么如果它关闭或出错,它应该将其从select
集合中删除。(或者根据逻辑停止调用select
。)
但你不能无视这个案子,若无其事地继续跑。
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- cudaMemcpyToSymbol只是挂起,永远不会返回.GPU 处理速度为 100%.代码在 K40 上工作正常,但
- srand在C++中速度太慢,它返回相同的数字
- LogoUser在Windows 7上返回速度较慢,凭据不正确
- 返回元素的速度比通过引用和修改发送元素的速度慢
- select()中的c++makefile项目在stdin中的返回速度异常快
- 返回私有类成员的速度是否比使用结构并直接访问该变量慢
- 从功能返回容器:优化速度和现代风格