This commit is contained in:
coco
2026-07-03 16:05:30 +08:00
commit df489d5640
1101 changed files with 779140 additions and 0 deletions
+228
View File
@@ -0,0 +1,228 @@
#include "stdafx.h"
#include "StdThread.h"
#include <process.h>
ProducerThread::ProducerThread()
{
m_bEngineRunning = false;
m_hHandle = NULL;
}
ProducerThread::~ProducerThread(void)
{
StopThread();
}
bool ProducerThread::StartThread()
{
if ( !m_bEngineRunning && m_hHandle == NULL )
{
m_hHandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,NULL);
if ( m_hHandle != NULL )
{
int nWaitTime = 0;
while (!m_bEngineRunning && nWaitTime < 3000)
{
Sleep(10);
nWaitTime = nWaitTime + 10;
}
}
}
return m_bEngineRunning;
}
bool ProducerThread::StopThread()
{
if ( m_bEngineRunning )
{
m_bEngineRunning = false;
WaitForSingleObject(m_hHandle,INFINITE);
}
return true;
}
unsigned int ProducerThread::TheThread(void *pParam)
{
ProducerThread *pThis = (ProducerThread *)pParam;
pThis->m_bEngineRunning = true;
pThis->ThreadFunction();
return 0;
}
ConsumerThread::ConsumerThread()
{
m_bEngineRunning = false;
m_hHandle = NULL;
}
ConsumerThread::~ConsumerThread(void)
{
StopThread();
}
bool ConsumerThread::StartThread()
{
if (!m_bEngineRunning && m_hHandle == NULL)
{
m_hHandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,NULL);
if (m_hHandle != NULL)
{
int nWaitTime = 0;
while (!m_bEngineRunning && nWaitTime < 3000)
{
Sleep(10);
nWaitTime = nWaitTime + 10;
}
}
}
return m_bEngineRunning;
}
bool ConsumerThread::StopThread()
{
if ( m_bEngineRunning )
{
m_bEngineRunning = false;
m_queData.push_back( NULL );
WaitForSingleObject(m_hHandle,INFINITE);
void* pData = NULL;
while( m_queData.PopFront( pData ) )
{
if ( pData != NULL )
{
ReleaseData(pData);
}
}
m_hHandle = NULL;
}
return true;
}
void ConsumerThread::PutDataToQue( void * pData )
{
m_queData.push_back( pData );
}
unsigned int ConsumerThread::TheThread(void *pParam)
{
ConsumerThread *pThis = (ConsumerThread *)pParam;
pThis->m_bEngineRunning = true;
while ( pThis->m_bEngineRunning )
{
void* pData = NULL;
pThis->m_queData.wait_and_pop( pData );
if ( pData != NULL )
{
pThis->ConsumeDataFromQue( pData );
pThis->ReleaseData( pData );
}
else
{
break;
}
}
return 0;
}
MultiConsumerThread::MultiConsumerThread()
{
m_bEngineRunning = false;
m_vecHandle.clear();
}
MultiConsumerThread::~MultiConsumerThread(void)
{
StopThread();
}
bool MultiConsumerThread::StartThread(int iThread)
{
for(int i = 0;i < iThread ; ++i)
{
HANDLE hHandle = (HANDLE)_beginthreadex(NULL,0,TheThread,this,0,NULL);
if (hHandle != NULL)
{
m_vecHandle.push_back(hHandle);
}
}
return m_bEngineRunning;
}
bool MultiConsumerThread::StopThread()
{
if ( m_bEngineRunning )
{
m_bEngineRunning = false;
int iSize = m_vecHandle.size();
for(int i = 0; i < iSize; ++i)
{
m_queData.push_back( NULL );
}
vector<HANDLE>::iterator iterCur = m_vecHandle.begin();
vector<HANDLE>::iterator iterEnd = m_vecHandle.end();
for(;iterCur != iterEnd; ++iterCur)
{
WaitForSingleObject(*iterCur,INFINITE);
CloseHandle(*iterCur);
}
void* pData = NULL;
while( m_queData.PopFront( pData ) )
{
if ( pData != NULL )
{
ReleaseData(pData);
}
}
}
return true;
}
void MultiConsumerThread::PutDataToQue( void * pData )
{
m_queData.push_back( pData );
}
unsigned int MultiConsumerThread::TheThread(void *pParam)
{
MultiConsumerThread *pThis = (MultiConsumerThread *)pParam;
pThis->m_bEngineRunning = true;
while ( pThis->m_bEngineRunning )
{
void* pData = NULL;
pThis->m_queData.wait_and_pop( pData );
if ( pData != NULL )
{
pThis->ConsumeDataFromQue( pData );
pThis->ReleaseData( pData );
}
else
{
break;
}
}
return 0;
}