当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>Visual C++教程

VC++深入详解:消息循环

    至此,注册窗口类、创建窗口、显示和更新窗口的工作都已完成,就该进入消息循环了。CWinThread类的Run函数就是完成消息循环这一任务的,该函数是在AfxWinMain函数中调用的,调用形式如下(位于例3-7所示AfxWinMain函数实现代码的符号④处)所示。
    pThread->Run();

    CWinThread类的Run函数的定义位于THRDCORE.CPP文件中,代码如例3-16所示。

    例3-16

 // main running routine until thread exits
    int CWinThread::Run()
    {
        ASSERT_VALID(this);
     
        // for tracking the idle time state
        BOOL bIdle = TRUE;
        LONG lIdleCount = 0;
     
        // acquire and dispatch messages until a WM_QUIT message is received.
        for (;;)
        {
            // phase1: check to see if we can do idle work
            while (bIdle &&
                !::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE))
            {
                // call OnIdle while in bIdle state
                if (!OnIdle(lIdleCount++))
                    bIdle = FALSE; // assume "no idle" state
            }
     
            // phase2: pump messages while available
            do
            {
                // pump message, but quit on WM_QUIT
                if (!PumpMessage())
                    return ExitInstance();
     
                // reset "no idle" state after pumping "normal" message
                if (IsIdleMessage(&m_msgCur))
                {
                    bIdle = TRUE;
                    lIdleCount = 0;
                }
     
            } while (::PeekMessage(&m_msgCur, NULL, NULL, NULL, PM_NOREMOVE));
        }
     
        ASSERT(FALSE);  // not reachable
    }


    该函数的主要结构是一个for循环,该循环在接收到一个WM_QUIT消息时退出。在此循环中调用了一个PumpMessage函数,该函数的部分定义代码如例3-17所示。

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接