ARRTYPE_ZONEBACKUP& CMediaSrv::GetArrZoneBackup( int nOpFlag)
{
if ( nOpFlag == DATAOP_R)
{
if ( m_nZBWriteCounte >0)
{
WaitForSingleObject( m_hEventZB);
}
SetEvent( m_hEventZB);
m_nZBReadCounte ++;
}
else if ( nOpFlag == DATAOP_W)
{
if ( m_nZBReadCounte > 0 || m_nZBWriteCounte > 0)
{
WaitForSingleObject( m_hEventZB);
}
SetEvent( m_hEventZB);
m_nZBWriteCounte++;
}
else
{
AfxTrace(" GetArrZoneBackup unknown operation");
return NULL;
}
return m_arrZoneBackup;
}
void CMediaSrv::ReleaseZoneBackup(  int nOpFlag)
{
if ( nOpFlag == DATAOP_R)
{
m_nZBReadCounte--;
if ( m_nZBReadCounte ==0)
{
ResetEvent( m_hEventZB);
}
}
else if ( nOpFlag == DATAOP_W)
{
m_nZBWriteCounte--;
if ( m_nZBWriteCounte ==0)
{
ResetEvent( m_hEventZB);
}
}
else
{
AfxTrace(" GetArrZoneBackup unknown operation");
return NULL;
}
}