帮忙分析一下这句代码的含义感谢诸君
std::map<int, GB28181_MEDIA_PARA>::iterator iter=media_list.begin();//写明注释
这是map的使用方法(有些搞不懂)
使用map得包含map类所在的头文件
#include <map> //注意,STL头文件没有扩展名.h
map对象是模板类,需要关键字和存储对象两个模板参数:
std:map<int,string> personnel;
这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.
为了使用方便,可以对模板类进行一下类型定义,
typedef map<int,CString> UDT_MAP_INT_CSTRING;
UDT_MAP_INT_CSTRING enumMap;
这是问题代码节选部分(应用于gb28181中,关键点map的解析有不理解)
case EXOSIP_CALL_CLOSED:/*BEY此呼叫已收到再见结束会话*/
{
/*实时视音频点播*/
/*历史视音频回放*/
/*视音频文件下载*/
dbg("<EXOSIP_CALL_CLOSED>\n"); //日志输出会话关闭
if(MSG_IS_BYE(g_event->request)) //如果测试消息是再见请求
{
dbg("<MSG_IS_BYE>\n"); //日志输出消息请求是BYE
//if((0 != g_did_realPlay)&&(g_did_realPlay == g_event->did))/*实时视音频点播*/
{
/*关闭:实时视音频点播/历史视音频回放/视音频文件下载*/
//dbg("realPlay closed success!\n");
//g_did_realPlay = 0;
pthread_mutex_lock(&media_list_mutex);//阻塞式加锁(傻等(一直盯着看的)加锁类型)心跳互斥锁
GB28181_MEDIA_PARA media_info; //媒体段落结构体指针
std::map<int, GB28181_MEDIA_PARA>::iterator iter=media_list.begin();//**???这段代码啥意思???
for(;iter!=media_list.end();){
if(iter->first == g_event->did){
memcpy(&media_info,&iter->second,sizeof(GB28181_MEDIA_PARA));
media_list.erase(iter);
break;
}
else{
iter ++;
}
}
if(iter != media_list.end()){
strcpy(media_info.control_type,"Closed");
set_media_control(&media_info);
//usleep(500000);
st_eXosip_callback.st_exosip_media_control(&media_info);//获取当前媒体控制状态
}
pthread_mutex_unlock(&media_list_mutex);
//eXosip_lock(context);
eXosip_message_build_answer(context,g_event->tid, 200, &g_answer);/*Build default Answer for request*/
eXosip_message_send_answer(context,g_event->tid, 200, g_answer);/*按照规则回复200OK*/
dbg("eXosip_message_send_answer success!\n");
//eXosip_unlock(context);
}