回调判断求解决.
- C/C++ code
/***************************************************************************************** 我在SaveRecord()中的H264_PLAY_StartDataRecord,把通道和RealPlay返回值传入回调中 但是这两个变量是一对的,而回调中的那个函数又只要通道号,而每个设备的通道号又有重复 而我该如何做才能做到无重复???******************************************************************************************/int __stdcall RealDataCallBack_V2(long lRealHandle, const PACKET_INFO_EX *pFrame, unsigned int dwUser){ H264_PLAY_InputVideoData(dwUser, (unsigned char*)pFrame->pPacketBuffer, pFrame->dwPacketSize); return 1;}void CTabOneCtrl::SaveRecord() //is->lPlayHandle是监控器句柄, is->nDevNum是通道号{ CString sFileName; for(map<CString, vector<LOGIN_INFO>>::iterator it = m_RecordInfo.begin(); it != m_RecordInfo.end(); it++) { for(vector<LOGIN_INFO>::iterator is = it->second.begin(); is != it->second.end(); is++) { m_dwUser = is->nDevNum; H264_PLAY_OpenStream(is->nDevNum, NULL, NULL, SOURCE_BUF_MIN); H264_PLAY_Play(is->nDevNum, NULL); sFileName.Format("C:\\ER\\%s_%d.h264", it->first, is->nDevNum); H264_DVR_SetRealDataCallBack_V2(is->lPlayHandle, RealDataCallBack_V2, is->nDevNum); H264_PLAY_StartDataRecord(is->nDevNum, sFileName, MEDIA_FILE_NONE); } }}
[解决办法]
通道号会有很多吗?如果不太多,可以在回调函数里面弄个静态数组,来存放已经处理过的通道号
[解决办法]
将另一变量设置成全局变量, 调用函数时, 加锁.