none
创建UI线程 RRS feed

  • 问题

  • MFC windows程序设计P887页举了个创建UI线程的例子,不过没有列出完整代码,我照着写了一遍,编译通过,但运行么也没有!任务管理器里都没有相关信息。代码如下:

    #include <afxwin.h>

    class CMainWindow : public CFrameWnd
    {
    public:
     CMainWindow();
    protected:
     DECLARE_MESSAGE_MAP()
     afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    };

    CMainWindow::CMainWindow()
    {
     Create(NULL, _T("UIThread Window"));
    }

    BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
     ON_WM_LBUTTONDOWN()
    END_MESSAGE_MAP()

    void CMainWindow::OnLButtonDown(UINT nFlags, CPoint point)
    {
     // TODO: Add your message handler code here and/or call default
     PostMessage(WM_CLOSE);
    }

    class CUIThread : public CWinThread
    {
     DECLARE_DYNCREATE(CUIThread)
    public:
     virtual BOOL InitInstance();
    };

    IMPLEMENT_DYNCREATE(CUIThread, CWinThread)

    BOOL CUIThread::InitInstance()
    {
     m_pMainWnd=new CMainWindow;
     m_pMainWnd->ShowWindow(SW_SHOW);
     m_pMainWnd->UpdateWindow();
     return CWinThread::InitInstance();
    }


    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
     CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
    }

    怀疑是不是main函数没写对,书中只告诉用AfxBeginThread创建线程。main函数是我自己写的。

    工程是一个空的win32 project属性里用use MFC in a shared DLL

    2009年1月30日 12:27

答案

  • 是。你的线程没启动完,整个进程就结束了,所以什么都没看到。
    VC的文档中还有其他MFC多线程示例,例如MTGDI和MTMDI,你可以去看看。


    MSMVP VC++
    2009年1月30日 17:54
    版主
  •  
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
     CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
        ::Sleep(INFINITE);
    return 0;
    }

    主进程结束会自动结束所有的线程
    这样写你的主进程就不会结束了,你就可以看到分线程的运行了
    Hello world
    2009年1月31日 13:04
    版主

全部回复

  • 是。你的线程没启动完,整个进程就结束了,所以什么都没看到。
    VC的文档中还有其他MFC多线程示例,例如MTGDI和MTMDI,你可以去看看。


    MSMVP VC++
    2009年1月30日 17:54
    版主
  •  
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    {
     CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
        ::Sleep(INFINITE);
    return 0;
    }

    主进程结束会自动结束所有的线程
    这样写你的主进程就不会结束了,你就可以看到分线程的运行了
    Hello world
    2009年1月31日 13:04
    版主