| class SomeClass { private: IMyInterface *m_pInt; public: void Method1() { //Init m_pInt } void Method2() { //call method of m_pInt } } |
| #define WM_METHOD1 WM_USER + 100 #define WM_METHOD2 WM_USER + 101 class CThreadWnd : public CWindowImpl<CThreadWnd> { private: SomeClass m_someClass; public: BEGIN_MSG_MAP(CThreadWnd) MESSAGE_HANDLER(WM_METHOD1, OnMethod1) MESSAGE_HANDLER(WM_METHOD2, OnMethod2) END_MSG_MAP() LRESULT OnMethod1(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); LRESULT OnMethod2(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/); } |
| CThreadWnd wndThread; //In thread A wndThread.SendMessage(WM_METHOD1); //In thread B wndThread.SendMessage(WM_METHOD2); |
| UINT WINAPI ThreadProc(LPVOID lpParam) { ::CoInitialize(0); CThreadWnd *pWnd = (CThreadWnd*)lpParam; CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop); pWnd->Create(NULL, CRect(0, 0, 0, 0), NULL, WS_POPUP); theLoop.Run(); pWnd->DestroyWindow(); _Module.RemoveMessageLoop(); ::CoUninitialize(); return 0; } |
关注此文的读者还看过: