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论坛报道