读书人

请来帮小弟我看看下面有关问题(事件)

发布时间: 2012-02-29 16:44:10 作者: rapoo

求助:请各位大哥来帮我看看下面问题(事件),谢谢!
//播放所有wave,mps,和视频文件
class CVideo
{
private:
/// direct show
IGraphBuilder*m_pGraph;// Filter对象
IMediaControl*m_pMediaControl;// 流媒体播放器
IMediaPosition*m_pMediaPosition;// 播放位置
IMediaEvent*m_pEvent;// 流媒体触发事件
IVideoWindow*m_pViewWin;// 播放视频的窗口
HWNDm_hWnd;// 窗口句柄
BOOLm_isLoop;// 是否循环播放

/// direct sound
LPDIRECTSOUND8m_pSound;// 声音硬件指针
LPDIRECTSOUNDBUFFERm_pSBuffer;// 声音缓冲
DSBUFFERDESCm_dsdesc;
public:
LRESULT AVI_WaitCompletion(long a=INFINITE)//等候响应事件,一般用于播放avi。使用时需传入一个长整形,确定播放停止的时间用毫秒表示。
{
long evCode;
if( m_pEvent )
{
m_pEvent-> WaitForCompletion(a,&evCode);
return S_OK;
}
else
{
return E_FAIL;
}

}
};


//初始化流媒体播放
HRESULT CVideo::InitStream()
{
// 创建过滤器
CoInitialize( NULL );
CoCreateInstance(CLSID_FilterGraph, NULL,
CLSCTX_INPROC, IID_IGraphBuilder, (void**)&m_pGraph);

// 创建控制器
m_pGraph-> QueryInterface( IID_IMediaControl, ( void** )&m_pMediaControl );

// 创建播放位置
m_pGraph-> QueryInterface( IID_IMediaPosition, ( void** )&m_pMediaPosition );

// 创建事件响应接口
m_pGraph-> QueryInterface( IID_IMediaEvent, ( void** )&m_pEvent );

// 创建播放窗口
m_pGraph-> QueryInterface( IID_IVideoWindow, ( void** )&m_pViewWin );


return S_OK;
}


请教:

这里有几个地方不明白:
问题1:
INFINITE 这个系统定义好的,是奥妙?

问题2:
if( m_pEvent )

是什么意思?

哪个东西来响应事迹啊?

问题3:
m_pEvent 是怎么产生的?


谢谢!


[解决办法]
3.HANDLE m_pEvent = CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPTSTR lpName);
INFINITE 无限长时间等待

读书人网 >C++

热点推荐