64,642
社区成员
发帖
与我相关
我的任务
分享
#pragma warning (disable: 4786)
#include <windows.h>
#include <map>
#include <string>
#include "GetIvrDeviceID.h"
using namespace std;
//Global Variable
map <long, string> g_map_deviceid;
CRITICAL_SECTION g_cs;
long g_count = 0;
void InitMapCriticalSection(void)
{
if (1 == InterlockedIncrement(&g_count))
{
InitializeCriticalSection(&g_cs);
}
return ;
}
void SetFinishToDevice(long call_id, const char *p_deviceid)
{
try
{
EnterCriticalSection(&g_cs);
g_map_deviceid.insert(map <long, string>::value_type(call_id, p_deviceid));
LeaveCriticalSection(&g_cs);
}
catch(...)
{
return ;
}
return ;
}
//根据call_id获取finish_to_device,获取后自动删除该纪录,所以不可重复查询
int CanGetFinishToDevice(long call_id, char *p_deviceid)
{
map <long, string>::iterator it;
try
{
EnterCriticalSection(&g_cs);
it = g_map_deviceid.find(call_id);
if (g_map_deviceid.end() != it)
{
strcpy( p_deviceid, it->second.c_str() );
g_map_deviceid.erase(it);
LeaveCriticalSection(&g_cs);
return 1;
}
else
{
LeaveCriticalSection(&g_cs);
return 0;
}
}
catch (...)
{
return 0;
}
}
void FreeMapSource(void)
{
if (0 == InterlockedDecrement(&g_count))
{
DeleteCriticalSection(&g_cs);
}
return ;
}
int CanGetFinishToDevice(long call_id, char *p_deviceid)
{
map <long, string>::iterator it;
try
{
EnterCriticalSection(&g_cs);
it = g_map_deviceid.find(call_id);
if (g_map_deviceid.end() != it)
{
strcpy( p_deviceid, it->second.c_str() );
g_map_deviceid.erase(it);
LeaveCriticalSection(&g_cs);
return 1;
}
else
{
LeaveCriticalSection(&g_cs);
return 0;
}
}
catch (...)
{
return 0;
}
}
try
{
EnterCriticalSection(&g_cs);
g_map_deviceid.insert(map <long, string>::value_type(call_id, p_deviceid));
LeaveCriticalSection(&g_cs);
}
catch(...)
{ //如果跑了异常,那么就没LeaveCriticalSection了
return ;
}
strcpy( p_deviceid, it->second.c_str() );