Microsoft Windows 7 Pro 上的实时应用程序

Posted

技术标签:

【中文标题】Microsoft Windows 7 Pro 上的实时应用程序【英文标题】:Real time application on Microsoft Windows 7 Pro 【发布时间】:2012-07-06 10:17:37 【问题描述】:

在尝试了很多东西之后,我打开了这个新线程。 我的应用程序(VS2010 上的 C++)必须抓取图像,详细说明图像,通过 UDP 发送结果。问题是频率:200次/秒。所以我有一个相机,它以 200Hz 的频率在双缓冲区中记录图像,我必须在 5 毫秒内详细说明图像。该应用程序在 99,999 % 的时间内工作,但我认为 Win7 Pro 取消了我的实时优先级,因此在 100000 例中有 1 例出现问题。 看msdn论坛之类的,我只能用:

    SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);在以管理员权限启动进程时获得实时优先级 SetThreadPriority(HANDLE, THREAD_PRIORITY_ABOVE_NORMAL);或 THREAD_PRIORITY_HIGHEST 或 THREAD_PRIORITY_TIME_CRITICAL。

现在,我启动了 5 个线程 (_beginthreadex),并且在相机的已编译 DLL 中启动了几个线程。我认为如果我为所有 5 个线程设置 Time Critical 优先级,它们中的任何一个都没有比其他线程更高的优先级。

所以我有两个问题:

我能否以 200 Hz 的频率工作而不会出现 Windows 的延迟? 您对我的线程设置有什么建议吗?

谢谢!! 再见 保罗

【问题讨论】:

“出现问题”是什么意思? 嗯.. 图像周期 5 毫秒,磁盘延迟 10 毫秒 = 痛苦。任何交换,你都会被塞满,(无论如何,在微调器上)。不过,我希望您可以在总体上接近 5 毫秒,但要小心、额外的缓冲并接受一点延迟。 @Martin James:我使用 SSD 是为了避免磁盘延迟。 @Daniel Mosmondor:“出现问题”意味着相机在我详细说明时覆盖了缓冲区。例如:如果相机每 5 毫秒交换一次缓冲区,而我的详细说明持续 6 毫秒然后相机会覆盖我的一点缓冲区。我可以使用超过 2 个缓冲区,但我必须每 5 毫秒发送一次结果,所以它不会改变这种情况.. 图像与其通过 UDP 发送的“摘要”之间的最大延迟是多少?我之所以这么问,是因为您说您必须每 5 毫秒发送一次数据报,但您没有说它们相对于传入图片的时间是什么...... 【参考方案1】:

哦,我会为此使用两个以上的缓冲区。包含 200 个图像对象的池似乎是更好的选择。

总体而言,您可以承受多少延迟?视频流式传输始终是同一个故事 - 您可以拥有一致、无暂停的操作或低延迟,但不能两者兼而有之。

客户端的视频图像缓冲队列有多大?

编辑:

'我必须每 5 毫秒发送一个 UDP 数据报' :((

好的,所以你有一个图像输出队列,其中有一个 5 毫秒循环的 UDP 发送线程,是吗?队列绝不能为空。听起来确实像阐述是瓶颈。

您是否有 [number of cores+] 线程池进行详细说明?

【讨论】:

我使用了双缓冲区,因为我必须每 5 毫秒发送一个 UDP 数据报。所以,我可以使用 200 幅图像的缓冲区,但如果我重叠了 5 毫秒的时间段,我就不得不中断详细说明..

以上是关于Microsoft Windows 7 Pro 上的实时应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Windows 7 pro 上的凭据提供程序 64 位

随心所欲 | Microsoft 微软 Surface Pro 7 12.3寸平板电脑 约9694元

无法在 Windows 7 机器上的 Microsoft Visual C++ 2010 中运行 OpenCV

在 windows 10 pro 上设置 python

在 Windows 7 Pro 的 cmd 中出现系统错误 5

Windows 7支持结束,您该做点什么