Загрузка ресурсов в фоновом режиме в DirectX 9.0 - PullRequest
0 голосов
/ 22 октября 2011

Я сделал 3D-игру с DirectX9.0.

Я хочу загрузить ресурсы в фоновом режиме, используя поток.

Вот мой код.

---------------- Attakc.h ---------------------------

#define AFXBEGINTHREAD(pfnThreadProc,pParam) AfxBeginThread(pfnThreadProc, pParam, THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL)

CWinThread* g_pThread  = NULL;

volatile bool g_bExitThread  = true;

CCriticalSection g_csExitThread;

---------------- Attakc.cpp ---------------------------

...

case WM_START:

    if(wParam >= 0 && wParam < 18)
    {
        g_csExitThread.Lock();
        g_bExitThread = false;
        g_csExitThread.Unlock();
        g_pThread = AFXBEGINTHREAD(ThreadFunc,0);
         if(NULL == g_pThread)
         {
             MessageBoxW(0,L"Failed to Create Thread",0,0);
         }
         g_pThread->m_bAutoDelete = TRUE;
         g_pThread->ResumeThread();
         wParamTemp = wParam;
         lParamTemp = lParam;
         uMsgTemp = uMsg;
    }

....

UINT ThreadFunc(LPVOID lpParam)
{

while(true)
{

    Sleep(1);

    g_csExitThread.Lock();
    if(true == g_bExitThread)
    {
        g_csExitThread.Unlock();
        break;
    }
    else
    {
        g_csExitThread.Unlock();

        g_pApp->GotoHole(wParamTemp, lParamTemp);
        g_bExitThread = true;
        g_pApp->m_nRenderMode = RENDERMODE_SCENE;
        g_pApp->StartFlyOver();
        g_pApp->m_flyOver.bFirstTime = TRUE;
        g_pApp->m_uiLoadingMenu.m_bStart = FALSE;
        g_pApp->m_uiLoadingMenu.nTime = 0;
        g_pApp->m_uiLoadingMenu.count = 0;
    }
}
return 0L;
}

Затем, когда я запускаю этот проект, появляется ошибка E_OUTOFMEMORY. (D3DXCreateTextureFromFile)

Я думаю, что это относится к синхронизации потока.

У меня нет опыта загрузки ресурсов с помощью потока.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 24 октября 2012

Использовали ли вы флаг D3DCREATE_MULTITHREADED при инициализации d3d?

...