ローディング画面をマルチスレッドで動かせません。
ローディング画面をマルチスレッドで動かせません。
DirectXとC++をVisualStudio2010でゲームを制作しています。
ローディング画面を動かせるようにマルチスレッドにしているんですが、パソコンによってはローディング画面から動かなくなってしまいます。(開発環境では、問題なく動きます)
スレッドの呼び出し部分は以下のようになっています。
HANDLE thread;
CScene gamen; //タイトル画面やメインゲーム画面などのシーンを管理
void Loading()
{
SetDrawLoading( true );
delete gamen;
gamen = new CTitleGamen();
thread = (HANDLE)_beginthreadex(NULL,0,DrawLoading,NULL,0,NULL);
gamen->LoadData(); //クラス内の画像や音楽データを読み込み
effect->SetDrawLoading(false);
WaitForSingleObject( thread, INFINITE );
CloseHandle(thread);
}
マルチスレッド部分は以下のように、
drawLoading変数がtrueの間、ローディング画面を描画するようにしています。
D3DXMATRIX m_world;
unsigned __stdcall DrawLoading(void *p){
LPDIRECT3DTEXTURE9 pTexture;
D3DXCreateTextureFromFileEx(m_pD3DDevice, TEXT("texture.png"),16, 16, 0, 0,
D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_DEFAULT,
D3DCOLOR_XRGB(255,255,0), NULL, NULL, &pTexture))
do{
m_pD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
if( SUCCEEDED( m_pD3DDevice->BeginScene() ) ) {
D3DXMatrixIdentity( &m_world );
m_pD3DDevice->SetTransform( D3DTS_WORLD, &m_world );
m_pSprite->Begin( D3DXSPRITE_ALPHABLEND );
m_pSprite->Draw( pTexture, NULL, NULL,
&D3DXVECTOR3( timeGetTime()%800), 550, 0 ), 0xffffffff );
m_pSprite->End();
m_pD3DDevice->EndScene();
}
m_pD3DDevice->Present( 0, 0, 0, 0 );
}while( effect->GetDrawLoading() );
pTexture->Release();
_endthreadex(0);
return 0;
}
どなたか、ご教授お願い致します。
お礼
ありがとうございます。 クラスのデストラクタで解放処理を行っていたのを スレッドを抜けるときに解放するようにしたらエラーがなくなりました。 理由については後で調べてみます ありがとうございました。