我有一个C ++应用程序,可以读取和处理视频流。我有两个线程:一个线程读取流,第二个线程进行处理。我使用OpenCV VideoCapture访问流,并将帧(cv::Mat
)放入readerwriterqueue缓冲区中。我从另一个线程读取缓冲区中的帧并进行处理。
有时处理可能会花费很多时间,并且处理线程开始落后(同时将帧以相同的速度放入队列中)。这会增加缓冲区大小,并最终可能占用所有可用内存并挂起整个系统。我知道,如果没有足够的RAM,Windows将使用pagefile,但是系统仍然变得很落后。我需要确保不会发生这种情况。
我考虑过设置缓冲区大小的限制,并在缓冲区已满时将帧卸载到磁盘上。然后在有空间时将它们读回队列中。那行得通吗?有什么好的选择吗?一个人如何处理这样的问题?我当前的方法(图像队列)有效吗?请指教。