MFC opencv多线程读取采集卡数据
这个真的是诡异啊,如果我写成这样
int main()
{
VideoCapture cap (0);
cout<<cap.isOpened()<<endl;
while(1)
{
int64 tt = getTickCount();
Mat image ;
cap>>image;
int64 tte = getTickCount();
cout<<"time:"<<(tte-tt)/getTickFrequency()*1000.0<<"(ms)"<<endl;
imshow("tt",image);
cvWaitKey(30);
//Sleep(40);
}
cap.release();
system("pause");
return 0 ;
}
这个程序一点问题都没有,但是如果写成mfc下多线程的形式,如下
UINT read_data_thread(LPVOID pd)
{
//这里读取视频文件
VideoCapture cap(0);
if(cap.isOpened())
{
while(1)
{
if( read_thread_is_over )
{
break;
}
Mat image;
Mat temp_image;
//先要判读storage_data是不是大于max_s_data啦
if(storage_data.size() < max_s_data )
{
cap>>image;
imshow("视频数据",image);
cvWaitKey(10);
if(image.data == NULL )
{
isend = true;
break;
}
if( !is_one_game_over)
{
image.copyTo(temp_image);
//这里将数据保存到storage_data中去啦
s_d_g_cs.Lock();
storage_data.push(temp_image);
s_d_g_cs.Unlock();
}
}
Sleep(10);
}
}
else
{
AfxMessageBox(_T("没有打开视频文件"));
}
cap.release();//释放采集接口
return NULL;
}
这就有问题了,不管怎么样,image出来的数据就是 不想要的,也就是读取不了视频采集卡内的数据,这真叫人郁闷啊!这到底是因为什么呢?望大家指点