1

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

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

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

所以我有两个问题:

  • 我可以在没有 Windows 滞后的情况下以 200 Hz 的频率工作吗?
  • 你对我的线程设置有什么建议吗?

谢谢!!再见保罗

4

1 回答 1

0

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

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

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

编辑:

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

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

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

于 2012-07-06T10:38:00.967 回答