⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rbasestream.cpp

📁 组播发送测试网络程序,客户端
💻 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 + -