📄 rbasestream.cpp
字号:
// RBaseStream.cpp: implementation of the CRBaseStream class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
//#include "MyBvodPublic.h"
#include "RBaseStream.h"
//#include"mypublic.h"
#include "MyCommPublic.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRBaseStream::CRBaseStream()
{
m_hThread=NULL;
m_zStreamStatus=S_S_Idle;
m_hTerminateThread =m_hBeginRecv= m_hPauseRecv = m_hStopRecv = NULL;
m_hCheckCloseEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
}
CRBaseStream::~CRBaseStream()
{
CloseStream();
CloseHandle(m_hCheckCloseEvent);
}
int CRBaseStream::Create(SOCKADDR_IN myAddr, SOCKADDR_IN multiAddr)
{
if(m_sSocket.Startup(myAddr, multiAddr)<0 )//初始化多播端口
return EXEC_FAIL;
//初始化成功
m_hRecvEvent = WSACreateEvent();
WSAEventSelect(m_sSocket.GetSocket(), m_hRecvEvent,FD_READ); //绑定事件m_hTerminateThread = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hTerminateThread = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hBeginRecv= CreateEvent(NULL,TRUE,FALSE,NULL);
m_hPauseRecv = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hStopRecv = CreateEvent(NULL,TRUE,FALSE,NULL);
m_hThread = CreateThread(NULL,0,InitialThread,this,0,&m_dwThreadId);
TRACE("Create\n");
m_zStreamStatus=S_S_Inited;
return EXEC_OK;
}
DWORD CRBaseStream::RStreamThread()
{
return EXEC_OK;
}
void CRBaseStream::CloseStream()
{
if(m_zStreamStatus==S_S_Idle||m_zStreamStatus==S_S_Closed)
return;
DWORD dwStrat=timeGetTime();
SetEvent(m_hTerminateThread);
if (WaitForSingleObject(m_hThread,100)!=WAIT_OBJECT_0){
TerminateThread(m_hThread,CLOSETHREADCODE);
}
CloseHandle_(m_hRecvEvent);
CloseHandle_(m_hTerminateThread);
CloseHandle_(m_hBeginRecv);
CloseHandle_(m_hPauseRecv);
CloseHandle_(m_hStopRecv);
FreeBlockList(&m_listBlock);
m_sSocket.Close();
m_zStreamStatus=S_S_Closed;
DWORD dwff=timeGetTime()-dwStrat;
TRACE("dwoff=%d\n",dwff);
// SetEvent(m_hCheckCloseEvent);
}
void CRBaseStream::Start()
{
if(m_zStreamStatus==S_S_Recving) return ;
SetEvent(m_hBeginRecv);
}
void CRBaseStream::Pause()
{
if(m_zStreamStatus!=S_S_Recving) return ;
SetEvent(m_hPauseRecv);
}
void CRBaseStream::Stop()
{
if(m_zStreamStatus!=S_S_Recving) return ;
SetEvent(m_hStopRecv);
}
Stream_Status CRBaseStream::GetStreamStatus()
{
return m_zStreamStatus;
}
int CRBaseStream::RecvData(LPVOID lpBuf, int iSize)
{
return m_sSocket.RecvData(lpBuf,iSize);
}
/*char * CRBaseStream::GetBufferPoint()
{
return zDataBuff;
}*/
bool CRBaseStream::IsClose()
{
WaitForSingleObject(m_hCheckCloseEvent,INFINITE);
ResetEvent(m_hCheckCloseEvent);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -