【发布时间】:2013-12-30 10:28:41
【问题描述】:
我已经实现了一个包含单个生产者和消费者的简单程序。在这个程序中,生产者线程从相机的实时流中抓取帧并将其保存在队列和文件夹中,而在主线程(消费者)中,我正在获取此帧并保存它,以便查看该帧由消费者与生产者推送的消费者相同。但结果并不相同。谁能帮我找出我的错误?
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <string>
#include <iostream>
#include <queue>
#include <deque>
#include <time.h>
#include "Producer.h"
#include "boost\thread.hpp"
using namespace cv;
using namespace std;
queue<Producer> Producers;
boost::mutex sharedMutex;
void threadFunction()
{
Producer p;
string name="Havard";
VideoCapture capture("rtsp://192.168.10.20:1125/Master-0?profile=Master-0");
stringstream filenamep;
SYSTEMTIME st;
Mat Image;
Mat Image2;
for(int i=0;i<200;i++)
{
sharedMutex.lock();
capture >> Image;
Image.copyTo(Image2);
p.setVariables(i,name,Image2);
Producers.push(p);
filenamep << "D:/MultiThreading/MakingThreadSafeQueue/Images/" << p.count << "p.jpg";
imwrite(filenamep.str(),Image2);
sharedMutex.unlock();
filenamep.str("");
Image.release();
Image2.release();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Mat ImgC;
Producer p2;
boost::thread producerThread(&threadFunction);
stringstream filename;
while(1)
{
Sleep(500);
while(!Producers.empty())
{
sharedMutex.lock();
p2=Producers.front();
p2.img.copyTo(ImgC);
imshow("Frame",p2.img);
filename << "D:/MultiThreading/MakingThreadSafeQueue/Images/" << p2.count << ".jpg";
imwrite(filename.str(),ImgC);
Producers.pop();
sharedMutex.unlock();
ImgC.release();
p2.img.release();
filename.str("");
}
char c=cvWaitKey(1);
if(c==27) break;
}
return 0;
}
【问题讨论】:
标签: c++ multithreading opencv boost queue