读书人

关于CObject类

发布时间: 2013-01-28 11:49:56 作者: rapoo

【求助】关于CObject类

我现在在做一个从摄像头中去视频流的程序,其中每取一个视频流就要开一个线程,当要关闭这一视频流的时候,要用到::WaitForSingleObject(recordToStop,INFINITE);这一函数。其中的recordToStop是CEvent类的对象。但是我不知道有什么方法可以保存这个值,因为每次开一个线程后,都相当于新建一个CEvent对象。于是,作为C++菜鸟的我,就想到在map中保存当前正在取视频流的摄像头编号和recordToStop的对应关系。

不知道这个方法对不。如果不对,我应该用什么方法呢?请各位大神帮忙

还有一个问题就是,每次我想要停止去视频流的时候,就要把这个map的CEvent对象取出来,放入::WaitForSingleObject中,但是会报错:

error C2248: “CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)

部分程序如下:
1. AVIP类:


//AVIP.h 用于定义保存在map中的键的类型
#include <vfw.h>
#include "afxwin.h"
#include <afxmt.h>

class AVIP
{
public:
AVIP();
void setPfile(PAVIFILE ppfile);
void setPs(PAVISTREAM pps);
//void setRecord(CEvent &pRecordOn);
PAVIFILE getPfile();
PAVISTREAM getPs();
//CEvent getRecord();
CEvent RecordOn;
private:
PAVIFILE pfileOn;
PAVISTREAM psOn;
//CEvent RecordOn;
};



2. Video类

//Video.cpp:用于管理视频流的开启与结束
//.....
//打开视频浏览后
//Record_Complete是在Video.h中定义的CEvent对象
Record_Complete.SetEvent();
AVIP avip;
avip.setPfile(pfile);
avip.setPs(ps);
avip.RecordOn = &Record_Complete;
aviMap[camAVI] = avip;

//........
//关闭视频流

map<int,AVIP>::iterator it;
PAVIFILE pfileToStop = NULL;
PAVISTREAM psToStop = NULL;
CEvent recordToStop = NULL;

for(it=aviMap.begin();it!=aviMap.end();++it){
if(nCamToStop == it->first){
pfileToStop = it->second.getPfile();
psToStop = it->second.getPs();
recordToStop = &(it->second.RecordOn);

aviMap.erase(it);

::WaitForSingleObject(recordToStop,INFINITE);

}
}


求给位大侠帮忙啊~~~~~~~~~~救急救急
其实网上很多人说这个错误,可是我对C++了解的实在太少了,临时被分配的这个任务,所以望大虾们讲解的能细致一点,我个小虾米能听懂的~~~ c++
[解决办法]
不用CEvent类,用HANDLE来保存事件对象的句柄

你可以用map保存,也可以自定义一个数据结构
typdef struct xxx
{
int nCameraNumber;
HANDLE hEvent;
}XXX;



[解决办法]
WaitForSingleObject()参数中需要是用HANDLE对象,所以你需要map中保存它

读书人网 >VC/MFC

热点推荐