在COM中实现异步是非常复杂但又非常有用的。Process如下:
1. 列集要在线程里使用的接口。
2. Create一个线程。
3. 在线程里Release列集。
4. 调用接口的方法。
头文件如下:
class ATL_NO_VTABLE CAsync
{
protected:
CAsync();
virtual ~CAsync();
private:
unsigned int RunThread();
static unsigned int __stdcall ThreadFunction(void *pFun); //线程函数
HANDLE m_hThread;
protected:
STDMETHOD(EnableAsyncFunction)( IUnknown *pUnkSink); //异步的方法,传入需要列集的接口
/////////////////////////////////////////////////////////////////////
IStream *m_pIStream;
};
源文件如下:
STDMETHODIMP CAsync::EnableAsyncFunction( IUnknown *pUnkSink)
{
HRESULT hr = S_OK;
_AsyncNeedMarshal *m_pIHelper=0;
hr = pUnkSink->QueryInterface(IID__NEED, (void**)&m_pIHelper);
if (SUCCEEDED(hr))
{
&nbs