|
@@ -78,61 +78,64 @@ bool ThreadManager::createRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int
|
|
|
threadInfo.cardRoadInfo = pcmInfo;
|
|
|
threadInfo.threadState = EThreadState::State_Inited;
|
|
|
threadInfo.threadType = EThreadType::Type_CreateWAV;
|
|
|
- CreateWAVThread* pCreateWAVThread = new CreateWAVThread(threadInfo);
|
|
|
- if(pCreateWAVThread == nullptr)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成wav小文件线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
- // return false; // 创建失败
|
|
|
- }else
|
|
|
- {
|
|
|
- CPPTP.add_task(&CreateWAVThread::thread_task, pCreateWAVThread);
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexCreateWAVThreads);
|
|
|
- m_createWAVThreads.push_back(pCreateWAVThread);
|
|
|
- }
|
|
|
+ // CreateWAVThread* pCreateWAVThread = new CreateWAVThread(threadInfo);
|
|
|
+ // if(pCreateWAVThread == nullptr)
|
|
|
+ // {
|
|
|
+ // SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成wav小文件线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
+ // // return false; // 创建失败
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // CPPTP.add_task(&CreateWAVThread::thread_task, pCreateWAVThread);
|
|
|
+ // std::lock_guard<std::mutex> lock(m_mutexCreateWAVThreads);
|
|
|
+ // m_createWAVThreads.push_back(pCreateWAVThread);
|
|
|
+ // }
|
|
|
|
|
|
|
|
|
/* 创建计算音量的线程 */
|
|
|
threadInfo.threadType = EThreadType::Type_CreateDB;
|
|
|
- CreateDBThread* pCreateDBThread = new CreateDBThread(threadInfo);
|
|
|
- if(pCreateDBThread == nullptr)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建计算音量线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
- // return false; // 创建失败
|
|
|
- }else
|
|
|
- {
|
|
|
- CPPTP.add_task(&CreateDBThread::thread_task, pCreateDBThread);
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexCreateDBThreads);
|
|
|
- m_createDBThreads.push_back(pCreateDBThread);
|
|
|
- }
|
|
|
+ // CreateDBThread* pCreateDBThread = new CreateDBThread(threadInfo);
|
|
|
+ // if(pCreateDBThread == nullptr)
|
|
|
+ // {
|
|
|
+ // SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建计算音量线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
+ // // return false; // 创建失败
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // CPPTP.add_task(&CreateDBThread::thread_task, pCreateDBThread);
|
|
|
+ // std::lock_guard<std::mutex> lock(m_mutexCreateDBThreads);
|
|
|
+ // m_createDBThreads.push_back(pCreateDBThread);
|
|
|
+ // }
|
|
|
|
|
|
/* 创建生成长文件的线程 */
|
|
|
threadInfo.threadType = EThreadType::Type_CreateLongWAV;
|
|
|
- CreateRecordFileThread* pCreateLongWAVThread = new CreateRecordFileThread(threadInfo);
|
|
|
- if(pCreateLongWAVThread == nullptr)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成长文件线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
- // return false; // 创建失败
|
|
|
- }else
|
|
|
- {
|
|
|
- CPPTP.add_task(&CreateRecordFileThread::thread_task, pCreateLongWAVThread);
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexCreateLongWAVThreads);
|
|
|
- m_createLongWAVThreads.push_back(pCreateLongWAVThread);
|
|
|
- }
|
|
|
-
|
|
|
- /* 创建发送RTP数据的线程 */
|
|
|
- threadInfo.threadType = EThreadType::Type_RtpSend;
|
|
|
- CPPTP.add_task(&ThreadManager::thread_RTPSend, threadInfo);
|
|
|
-
|
|
|
- // RTPOneRoadThread* pRtpSendThread = new RTPOneRoadThread(threadInfo);
|
|
|
- // if(pRtpSendThread == nullptr)
|
|
|
+ // CreateRecordFileThread* pCreateLongWAVThread = new CreateRecordFileThread(threadInfo);
|
|
|
+ // if(pCreateLongWAVThread == nullptr)
|
|
|
// {
|
|
|
- // SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建发送RTP数据线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
+ // SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建生成长文件线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
+ // // return false; // 创建失败
|
|
|
// }else
|
|
|
// {
|
|
|
- // CPPTP.add_task(&RTPOneRoadThread::threadTask, pRtpSendThread);
|
|
|
- // std::lock_guard<std::mutex> lock(m_mutexRtpSendThreads);
|
|
|
- // m_rtpSendThreads.push_back(pRtpSendThread);
|
|
|
+ // CPPTP.add_task(&CreateRecordFileThread::thread_task, pCreateLongWAVThread);
|
|
|
+ // std::lock_guard<std::mutex> lock(m_mutexCreateLongWAVThreads);
|
|
|
+ // m_createLongWAVThreads.push_back(pCreateLongWAVThread);
|
|
|
// }
|
|
|
+
|
|
|
+ /* 创建发送RTP数据的线程 */
|
|
|
+ threadInfo.threadType = EThreadType::Type_RtpSend;
|
|
|
+ // CPPTP.add_task(&ThreadManager::thread_RTPSend, threadInfo);
|
|
|
+
|
|
|
+ /* 创建分派数据线程 */
|
|
|
+ threadInfo.threadType = EThreadType::Type_AssignSrcData;
|
|
|
+ AssignSrcDataThread* pAssignSrcDataThread = new AssignSrcDataThread(threadInfo);
|
|
|
+ if(pAssignSrcDataThread == nullptr)
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建分派数据线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
+ // return false; // 创建失败
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ CPPTP.add_task(&AssignSrcDataThread::thread_task, pAssignSrcDataThread);
|
|
|
+ std::lock_guard<std::mutex> lock(m_mutexAssignSrcDataThreads);
|
|
|
+ m_assignSrcDataThreads.push_back(pAssignSrcDataThread);
|
|
|
+ }
|
|
|
|
|
|
/* 创建录音线程 */
|
|
|
threadInfo.threadType = EThreadType::Type_RecordSrc;
|
|
@@ -148,22 +151,12 @@ bool ThreadManager::createRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int
|
|
|
m_recordThreads.push_back(pRecordThread);
|
|
|
}
|
|
|
|
|
|
- /* 创建分派数据线程 */
|
|
|
- threadInfo.threadType = EThreadType::Type_AssignSrcData;
|
|
|
- AssignSrcDataThread* pAssignSrcDataThread = new AssignSrcDataThread(threadInfo);
|
|
|
- if(pAssignSrcDataThread == nullptr)
|
|
|
- {
|
|
|
- SPDLOG_LOGGER_ERROR(m_logger, "{}:{} 创建分派数据线程失败", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName);
|
|
|
- // return false; // 创建失败
|
|
|
- }else
|
|
|
- {
|
|
|
- CPPTP.add_task(&AssignSrcDataThread::thread_task, pAssignSrcDataThread);
|
|
|
- std::lock_guard<std::mutex> lock(m_mutexAssignSrcDataThreads);
|
|
|
- m_assignSrcDataThreads.push_back(pAssignSrcDataThread);
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
/* 录音线程创建成功,增加引用计数 */
|
|
|
m_mapRecordThreadRefCount[pcmInfo.pcmInfo.strPCMName].push_back(compareItemID);
|
|
|
+ // SPDLOG_LOGGER_INFO(m_logger, "{}:{} 录音线程创建成功,map Size: {}, 当前引用计数: {}",
|
|
|
+ // pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName, m_mapRecordThreadRefCount.size(), m_mapRecordThreadRefCount[pcmInfo.pcmInfo.strPCMName].size());
|
|
|
|
|
|
return true;
|
|
|
}
|
|
@@ -175,8 +168,9 @@ bool ThreadManager::createRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int
|
|
|
bool ThreadManager::removeRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int compareItemID)
|
|
|
{
|
|
|
std::unique_lock<std::mutex> lock(m_mutexRecordThreadRefCount);
|
|
|
+ // SPDLOG_LOGGER_WARN(m_logger, "{}:{} 准备销毁录音线程, map Size: {}", pcmInfo.strSoundCardName, pcmInfo.pcmInfo.strPCMName, m_mapRecordThreadRefCount.size());
|
|
|
/* 先查找这个引用计数是否存在 */
|
|
|
- int refCount = 0;
|
|
|
+ int refCount = -1;
|
|
|
for(auto& pair : m_mapRecordThreadRefCount)
|
|
|
{
|
|
|
if(pair.first == pcmInfo.pcmInfo.strPCMName)
|
|
@@ -200,7 +194,12 @@ bool ThreadManager::removeRecordThread(const OneSoundCardPCMInfo_t& pcmInfo, int
|
|
|
SPDLOG_LOGGER_INFO(m_logger, "{} 录音线程引用计数减少,当前计数: {}", logBase, refCount);
|
|
|
return true;
|
|
|
}
|
|
|
- SPDLOG_LOGGER_INFO(m_logger, "{} 录音线程引用计数为0,即将停止该录音通道的所有线程", logBase);
|
|
|
+ else if(refCount < 0)
|
|
|
+ {
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 录音线程未找到,可能已经释放", logBase);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ SPDLOG_LOGGER_WARN(m_logger, "{} 录音线程引用计数为0,即将停止该录音通道的所有线程", logBase);
|
|
|
|
|
|
/* 引用计数为0,停止该录音通道的所有线程 */
|
|
|
/* 停止录音线程 */
|
|
@@ -321,6 +320,7 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
/* 没有需要销毁的线程 */
|
|
|
return;
|
|
|
}
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 准备销毁录音线程...", m_logBase);
|
|
|
/* 销毁录音线程 */
|
|
|
{
|
|
|
std::lock_guard<std::mutex> lock(m_mutexRecordThreads);
|
|
@@ -333,6 +333,8 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
if(EThreadState::State_Stopped == threadState ||
|
|
|
EThreadState::State_Error == threadState )
|
|
|
{
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "{} 销毁录音线程: {}:{}", m_logBase, pThread->getThreadInfo().cardRoadInfo.strSoundCardName,
|
|
|
+ pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName);
|
|
|
auto pRecordThread = dynamic_cast<RecordThread*>(pThread);
|
|
|
delete pRecordThread; // 删除线程
|
|
|
pThread = nullptr;
|
|
@@ -357,6 +359,8 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
if(EThreadState::State_Stopped == threadState ||
|
|
|
EThreadState::State_Error == threadState )
|
|
|
{
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "{} 销毁分派数据线程: {}:{}", m_logBase, pThread->getThreadInfo().cardRoadInfo.strSoundCardName,
|
|
|
+ pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName);
|
|
|
auto pAssignSrcDataThread = dynamic_cast<AssignSrcDataThread*>(pThread);
|
|
|
delete pAssignSrcDataThread; // 删除线程
|
|
|
pThread = nullptr;
|
|
@@ -381,6 +385,8 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
if(EThreadState::State_Stopped == threadState ||
|
|
|
EThreadState::State_Error == threadState )
|
|
|
{
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "{} 销毁 CreateWAV 线程: {}:{}", m_logBase, pThread->getThreadInfo().cardRoadInfo.strSoundCardName,
|
|
|
+ pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName);
|
|
|
auto pCreateWAVThread = dynamic_cast<CreateWAVThread*>(pThread);
|
|
|
delete pCreateWAVThread; // 删除线程
|
|
|
pThread = nullptr;
|
|
@@ -405,6 +411,8 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
if(EThreadState::State_Stopped == threadState ||
|
|
|
EThreadState::State_Error == threadState )
|
|
|
{
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "{} 销毁 CreateDB 线程: {}:{}", m_logBase, pThread->getThreadInfo().cardRoadInfo.strSoundCardName,
|
|
|
+ pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName);
|
|
|
auto pCreateDBThread = dynamic_cast<CreateDBThread*>(pThread);
|
|
|
delete pCreateDBThread; // 删除线程
|
|
|
pThread = nullptr;
|
|
@@ -429,6 +437,8 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
if(EThreadState::State_Stopped == threadState ||
|
|
|
EThreadState::State_Error == threadState )
|
|
|
{
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "{} 销毁 RecordFile 线程: {}:{}", m_logBase, pThread->getThreadInfo().cardRoadInfo.strSoundCardName,
|
|
|
+ pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName);
|
|
|
auto pCreateLongWAVThread = dynamic_cast<CreateRecordFileThread*>(pThread);
|
|
|
delete pCreateLongWAVThread; // 删除线程
|
|
|
pThread = nullptr;
|
|
@@ -453,6 +463,8 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
if(EThreadState::State_Stopped == threadState ||
|
|
|
EThreadState::State_Error == threadState )
|
|
|
{
|
|
|
+ SPDLOG_LOGGER_DEBUG(m_logger, "{} 销毁 RTP Send 线程: {}:{}", m_logBase, pThread->getThreadInfo().cardRoadInfo.strSoundCardName,
|
|
|
+ pThread->getThreadInfo().cardRoadInfo.pcmInfo.strPCMName);
|
|
|
auto pRtpSendThread = dynamic_cast<RTPOneRoadThread*>(pThread);
|
|
|
delete pRtpSendThread; // 删除线程
|
|
|
pThread = nullptr;
|
|
@@ -467,6 +479,7 @@ void ThreadManager::thread_destroyeRecordThread()
|
|
|
|
|
|
/* 销毁标志位置为false */
|
|
|
m_isDestroyeRecordThread.store(false);
|
|
|
+ SPDLOG_LOGGER_INFO(m_logger, "{} 录音线程销毁完成", m_logBase);
|
|
|
}
|
|
|
|
|
|
|
|
@@ -681,7 +694,7 @@ CreateRecordFileThread* ThreadManager::getCreateRecordFileThread(std::string pcm
|
|
|
// if(m_referCountConsistencyCompare <= 0)
|
|
|
// {
|
|
|
// /* 停止线程,并一直等待其停止 */
|
|
|
-// pThreadToRemove->thread_stopBlock();
|
|
|
+// pThreadToRemove->thread_stop_block();
|
|
|
// m_listConsistencyCompareThreads.remove(pThreadToRemove); // 从列表中移除
|
|
|
// delete pThreadToRemove; // 删除线程
|
|
|
// pThreadToRemove = nullptr;
|
|
@@ -816,7 +829,7 @@ CreateRecordFileThread* ThreadManager::getCreateRecordFileThread(std::string pcm
|
|
|
// {
|
|
|
// SPDLOG_LOGGER_INFO(m_logger, "{}:{} 噪音检测线程引用计数为0,准备销毁该线程",
|
|
|
// roadInfo.strSoundCardName.toStdString(), roadInfo.roadInfo.nRoadNum);
|
|
|
-// pThreadToRemove->thread_stopBlock(); // 停止线程
|
|
|
+// pThreadToRemove->thread_stop_block(); // 停止线程
|
|
|
// m_listNoiseDetectThreads.remove(pThreadToRemove); // 从列表中移除
|
|
|
// delete pThreadToRemove; // 删除线程
|
|
|
// pThreadToRemove = nullptr;
|