COCOS2DX引擎深入一————调度原理

来源:互联网 发布:nginx 默认403页面 编辑:程序博客网 时间:2024/06/05 00:43
main.cpp
 
int APIENTRY _tWinMain(HINSTANCE hInstance,                       HINSTANCE hPrevInstance,                       LPTSTR    lpCmdLine,                       int       nCmdShow){    UNREFERENCED_PARAMETER(hPrevInstance);    UNREFERENCED_PARAMETER(lpCmdLine);    // create the application instance    AppDelegate app;    return Application::getInstance()->run();}

Application里的run()循环调用了导演类Director的mainLoop();
 
 while(!glview->windowShouldClose())    {        QueryPerformanceCounter(&nNow);        if (nNow.QuadPart - nLast.QuadPart > _animationInterval.QuadPart)        {            nLast.QuadPart = nNow.QuadPart;                        director->mainLoop();            glview->pollEvents();        }        else        {            Sleep(0);        }    }

_animationInterval是我们设定的循环间隔,每次前后两个时间的差大于这个间隔,就执行一次主循环director->mainLoop(),小于这个间隔呢,就一直获取当前的时间,直到大于这个间隔。
 
再看mainLoop,
void DisplayLinkDirector::mainLoop(){    if (_purgeDirectorInNextLoop)    {        _purgeDirectorInNextLoop = false;        purgeDirector();    }    else if (! _invalid)    {        drawScene();             // release the objects        PoolManager::getInstance()->getCurrentPool()->clear();    }}

 
调用drawScene()方法绘制场景,并弹出自动回收池,使这一帧被放入自动回收池里的对象全部被释放。

1 0