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

时间:2012-07-06 10:17:37

标签: c++ windows multithreading visual-studio-2010 real-time

我尝试了很多东西之后打开了这个新帖子。 我的应用程序(VS2010上的C ++)必须抓取图像,精心制作图像,通过UDP发送结果。问题是频率:200次/秒。所以我有一台摄像机在200Hz的双缓冲区中记录图像,我必须在不到5毫秒的时间内完成图像的制作。该应用程序在99,999%的情况下工作,但我认为Win7 Pro取消了我的实时优先级,因此在100000个案例中有一个出错了。 阅读msdn论坛等等,我只能使用:

  1. SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS);使用管理员的权限启动时获得该流程的实时优先级
  2. SetThreadPriority(HANDLE,THREAD_PRIORITY_ABOVE_NORMAL);或THREAD_PRIORITY_HIGHEST或THREAD_PRIORITY_TIME_CRITICAL。
  3. 现在,我有5个线程由我(_beginthreadex)启动,并且几个线程在相机的已编译DLL中启动。我认为,如果我将所有5个线程的时间优先级设置为优先级,则其中没有一个优先级高于其他线程。

    所以我有两个问题:

    • 如果没有Windows的滞后,我可以在200赫兹下工作吗?
    • 您对我的主题有任何建议吗?设置?

    谢谢! 再见 保罗

1 个答案:

答案 0 :(得分:0)

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

总体而言,您能承受多少延迟?视频流总是一样的 - 你可以拥有一致的,无暂停的操作,或者低延迟,但不是两者兼而有之。

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

编辑:

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

好的,所以你有一个5ms循环的UDP发送线程的图像输出队列,是吗?队列必须永远不会为空。听起来确实像是细节是瓶颈。

你有[核心数量+]线程池进行详细说明吗?