技术 - 呼叫中心 - IVR/IVVR技术频道

使用C++Builder快速实现自己的专用IVR

2009-06-04 00:00:00   作者:   来源:   评论:0 点击:


2009/06/04

1.涉及的组件
  使用C++Builder开发固定流程的IVR。
  来话后放音,循环放音完成后挂机。
////////////////////////////////////////////////////////////


FindCallByID(m_OriginalCallID);

class CThreadManager
{
private:
TBucketList *m_pThreadList; //线程列表哈希表
TCriticalSection *m_pListLocker; //线程锁

public:
CThreadManager();
~CThreadManager();

//将线程加入线程表
void AddThread(TThread *pThd);
//根据线程ID从线程中移除
void RemoveThreadByThreadID(int ThreadID);
//根据线程ID查找线程对象
TThread *FindThreadByThreadID(int ThreadID);
};


//线程管理器构造
CThreadManager::CThreadManager()
{
m_pThreadList = new TBucketList(bl16);
m_pListLocker = new TCriticalSection();
}

//线程管理器析构
CThreadManager::~CThreadManager()
{
delete m_pThreadList;
delete m_pListLocker;
}


//加入线程列表
void CThreadManager::AddThread(TThread *pThd)
{
//多线程访问列表,需要加锁
m_pListLocker->Acquire();
try
{
m_pThreadList->Add((void*)(pThd->ThreadID), pThd);
}
catch(...)
{
}
m_pListLocker->Release();
}

//从线程列表中删除
void CThreadManager::RemoveThreadByThreadID(int ThreadID)
{
//多线程访问列表,需要加锁
m_pListLocker->Acquire();
try
{
TThread *pThd = NULL;
if (m_pThreadList->Find((void*)ThreadID, (void*)pThd))
{
m_pThreadList->Remove((void*)ThreadID);
}
}
catch(...)
{
}
m_pListLocker->Release();
}

//根据线程ID查找线程
TThread * CThreadManager::FindThreadByThreadID(int ThreadID)
{
TThread *pRetThd = NULL;

//多线程访问列表,需要加锁
m_pListLocker->Acquire();
try
{
TThread *pThd = NULL;
if (m_pThreadList->Find((void*)ThreadID, (void*)pThd))
{
pRetThd = pThd;
}
}
catch(...)
{
}
m_pListLocker->Release();
return pRetThd;
}

CTI论坛报道

相关阅读:

分享到: 收藏