Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保流程设置为实时优先级 我在VisualStudio上开发了一个控制台C++应用程序,它在Windows XP中必须是调度器的最高优先级。 int main() { while ( somecondition ) { // pick data from external hardware every 10 milliseconds // do computation } }_C++_Process_Real Time_Win32 Process - Fatal编程技术网

如何确保流程设置为实时优先级 我在VisualStudio上开发了一个控制台C++应用程序,它在Windows XP中必须是调度器的最高优先级。 int main() { while ( somecondition ) { // pick data from external hardware every 10 milliseconds // do computation } }

如何确保流程设置为实时优先级 我在VisualStudio上开发了一个控制台C++应用程序,它在Windows XP中必须是调度器的最高优先级。 int main() { while ( somecondition ) { // pick data from external hardware every 10 milliseconds // do computation } },c++,process,real-time,win32-process,C++,Process,Real Time,Win32 Process,我的意思是没有其他系统进程应该干扰它,因为它是一个实时数据采集系统,调整为每10毫秒刷新一次帧缓冲区 我试图将每一帧的时间长度保存到一个文件中,我发现在我设计的时间周围有一个奇怪的“量化”。为什么? 我还发现,有时长度是我的基本帧时间的倍数,这是由干扰内部O.S.进程引起的吗 有没有办法确保我的程序具有最高优先级?您只需拨打 我以前是这样的: HANDLE hThread = GetCurrentThread(void); SetThreadPriority(hThread, THREAD_PR

我的意思是没有其他系统进程应该干扰它,因为它是一个实时数据采集系统,调整为每10毫秒刷新一次帧缓冲区

我试图将每一帧的时间长度保存到一个文件中,我发现在我设计的时间周围有一个奇怪的“量化”。为什么?

我还发现,有时长度是我的基本帧时间的倍数,这是由干扰内部O.S.进程引起的吗

有没有办法确保我的程序具有最高优先级?

您只需拨打

我以前是这样的:

HANDLE hThread = GetCurrentThread(void);
SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL);

请注意,其他应用程序也可以执行相同的操作,因此两个线程具有相同的优先级。

请记住以下几点。首先,Windows XP不提供实时性保证,即使是“实时”优先级,所以从理论上讲,你也无法实现你想要的(在实践中,你的里程可能会有所不同)。其次,写入文件会在测量中引入巨大的偏差。这可能只是因为你看到的“量化”实际上是由I/O系统引起的。那么在这种情况下,测量定时的方法应该是什么呢?将delta t追加到列表中,并在程序完成时刷新它?这可能会引入更小(且更可预测)的偏差,特别是如果列表是预先分配的。您也可以定期刷新它,这甚至可能允许您测量文件偏差。如果您愿意的话,可以使用一些技术来测量偏差本身(尽管这无助于您保持10毫秒的时间范围)。通常使用驱动程序和相关的缓冲区以及信号来进行此类操作。你的硬件接口是如何工作的?视频I/O通常是延迟和帧速率之间的折衷-如果没有大量的“空闲”驱动器、线程和帧缓冲队列,很难维持高帧速率。磁盘写入相同-在没有排队/延迟的情况下“实时”写入文件通常是不可能的,特别是对于旋转媒体。我的硬件接口是一个PCI卡,它与红外跟踪系统通信,而我的程序是用Glut编写的,需要在硬盘上保存每帧标记位置的信息。如何将boost::thread与win32 api调用混合到GetCurrentThread和SetThreadPriority?boost实现在windows上,将调用相同的代码。您可以检查boost源代码。