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

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

在尝试了很多东西之后,我打开了这个新线程。 我的应用程序(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 中启动。我认为,如果我将 Time Critical 优先级设置为我的所有 5 个线程,那么它们中没有一个比其他线程具有更高的优先级。

所以我有两个问题:

  • 我可以在没有 Windows 延迟的情况下以 200 Hz 的频率工作吗?
  • 您对我的话题设置有什么建议吗?

谢谢!! 再见 保罗

最佳答案

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

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

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

编辑:

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

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

您是否有 [核心数 +] 线程池来进行细化?

关于c++ - Microsoft Windows 7 Pro 上的实时应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360287/

相关文章:

java - 当 Java 线程用于面向 Internet 的 Java Web 应用程序时

c++ - 将 std::string 转换为 std::chrono::duration

python - 如何为 Windows 构建 SystemTray 应用程序?

.net - Thread(method) 和 Thread(new ParameterizedThreadStart(method)) 之间的区别

android - 如何在android中设置循环延迟?

windows - 如何检查 OpenCV 是否使用 TBB、CUDA 或 Qt 支持进行编译?

c++ - 使用带有新 API 的编号索引进行无效转换

C++ 如何设计一个只能接受一组离散值的类,例如红绿蓝

python - SWIG 添加行以删除不存在的变量

c# - IIS 8 工作进程屏幕大小限制为 1024X768