扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:lop5712 来源:论坛 2007年10月20日
关键字:
…… // 列集IExample1Logic接口指针 IStream *pStream = NULL; if( FAILED( ::CoMarshalInterThreadInterfaceInStream( IID_IExample1Logic, m_pLogic,&pStream ) ) ) { m_pError->ReportHardError( __WFILE__, __LINE__, L"列集IExample1Logic接口失败!" ); return; } // 发起线程 HANDLE hThread = CreateThread( NULL, 0, Task2, pStream, 0, NULL ); if( !hThread ) { pStream->Release(); m_pError->ReportHardError( __WFILE__,__LINE__,L"任务线程创建失败!" ); return; } ::CloseHandle( hThread ); …… |
static DWORD WINAPI Task2( LPVOID pParam ) { ASSERT( pParam ); // 将此线程与MTA套间绑定 ::CoInitializeEx( NULL, COINIT_MULTITHREADED ); // 散集出IExample1Logic接口指针 IExample1Logic *pLogic = NULL; if( FAILED( ::CoGetInterfaceAndReleaseStream( reinterpret_cast< IStream* >( pParam ), IID_IExample1Logic, reinterpret_cast< void** >( &pLogic ) ) ) ) return static_cast< DWORD >( -1 ); // 执行任务 pLogic->Task2(); // 释放资源 pLogic->Release(); ::CoUninitialize(); return 0; } |
[ object, uuid(348FF439-26B3-495D-85C1-4464CAA98CD9), pointer_default(unique) ] interface IExample1Logic : IUnknown { HRESULT Task1(); HRESULT Task2(); }; [ object, uuid(348FF439-26B3-495D-85C2-4464CAA98CD9), pointer_default(unique) ] interface ISetTaskManager : IUnknown { HRESULT SetTaskManager( [in] ITaskManager *pManager ); }; ITask实现类的头文件代码 class CExample1Logic; class ATL_NO_VTABLE CTask : public CComObjectRootEx< CComMultiThreadModel >, public ITask { // ATL定义宏 DECLARE_NOT_AGGREGATABLE( CTask ) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP( CTask ) COM_INTERFACE_ENTRY( ITask ) END_COM_MAP() // 成员变量 protected: float m_Rate; // 当前进度 DWORD m_Cookie; // ITaskManager::AddTask返回的cookie HANDLE m_hEvent; // 等待事件,与CExample1Logic共同合作 // 构造、析构 public: CTask() : m_Rate( 0.0f ), m_Cookie( static_cast< DWORD >( -1 ) ), m_hEvent( NULL ) { // 什么都不做 } ~CTask() { ::CloseHandle( m_hEvent ); } // 接口实现 public: // ITask STDMETHOD(GetProcessRateOfTask)( float *pRate ); STDMETHOD(TerminateTask)(); // 友员类 friend class CExample1Logic; }; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者