我正在开发一个控制台C++应用程序,使用Windows XP上的Visual Studio,它必须处于调度程序可能的最高优先级。如何确保该过程设置为REAL_TIME优先级
int main()
{
while (somecondition)
{
// pick data from external hardware every 10 milliseconds
// do computation
}
}
我的意思是没有其他系统进程应该干扰它,因为它是调整刷新帧缓冲每10毫秒的实时数据采集系统。
我试图将每帧的时间长度保存到一个文件中,并在我期望的时间周围发现了一个奇怪的“量化”。为什么?
我还发现有时长度是我的基准帧时间的倍数,这是由干扰内部O.S.引起的。流程?
有没有办法确保我的程序的最高优先级?
请记住几件事情。首先,即使对于“实时”优先级,Windows XP也不提供实时保证,因此无法在理论上达到您想要的效果(实际上,您的里程可能会有所不同)。其次,写入文件会给测量带来巨大的偏差。这可能只是因为你看到的“量化”实际上是由I/O系统引起的。 –
那么在这种情况下应该怎样测量计时呢? 将delta t附加到列表中,并在程序完成时将其冲洗? – linello
这可能会引入一个更小(更可预测)的偏见,特别是如果列表是预先分配的。您也可以定期刷新它,这可能甚至允许您衡量文件偏差。有些技术可以衡量偏见本身,如果您愿意的话(尽管这不会帮助您保持10毫秒的时间范围)。 –