【发布时间】: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 毫秒发送一次数据报,但您没有说它们相对于传入图片的时间是什么......
标签: c++ windows multithreading visual-studio-2010 real-time