ファイルのロードとメモリについて質問です。
!!!!!!!!!!!!!!2015/11/23追記!!!!!!!!!!!!!!!!!!!
相互リンク:
http://hpcgi2.nifty.com/natupaji/bbs/pa ... ew&no=3695
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<今やっていることと問題>
非同期で大量のファイル(画像*49、音楽*35、フォントハンドルの作成*3、動画*2)を読み込んでいるのですが、いつも3~4個のファイルを読み込めません。
※コードは最下部に載せましたので、必要に応じてご覧になってください。
<原因の推測と質問>
私は、これはメモリ不足なのかなと考えています。
なぜなら、失敗する個数は、いつも3~4個で、ファイルの破損はない(と思う。実際、前はそのファイル単体でロードできた)からです。
皆さんはどうお考えでしょうか?
また、もし、原因がメモリ不足だとしたら、どのようにすればよいでしょうか?(これ以上ファイルはロードしないから必要な分だけ静的確保?)メモリについては無知なので、どうぞご享受ください。
別の原因があったら、その解決方法を示してくださるとありがたいです。
以下がコードになります。
SetDrawScreen(DX_SCREEN_BACK);
int mov = 0;
int mov_bgm = 0;
int loadnum;
int check;
int error = 0;
//ロード画面で使う動画のロード
mov = LoadGraph("動画.ogv");
mov_bgm = LoadSoundMem("音楽.ogg");
PlaySoundMem(mov_bgm, DX_PLAYTYPE_BACK);
PlayMovieToGraph( mov );
//非同期で種々のファイルをロード
SetUseASyncLoadFlag( TRUE ) ;
//色々なファイルのロード
LoadGraph("画像.png");//等々
const int loadmax = GetASyncLoadNum();
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) {
DrawExtendGraph(127, 10, 895, 610, mov, 1);
loadnum = GetASyncLoadNum();
DrawFormatString(320, 620, GetColor(185, 185, 185), "NOW LOADING WAIT A MINUTE...%d%", int((loadmax - loadnum) * 100 / loadmax));
if( GetMovieStateToGraph(mov) == 0 && loadnum == 0 ) {//動画と読み込みが終了
break;
}
else if( GetMovieStateToGraph(mov) == 0 && loadnum != 0 ){//動画ループ処理
SeekMovieToGraph(mov, 0);//最初から
StopSoundMem(mov_bgm);//一回止めて、
PlayMovieToGraph( mov );
PlaySoundMem(mov_bgm, DX_PLAYTYPE_BACK);
}
else if( GetMovieStateToGraph(mov) == 1 && loadnum == 0 ){//動画だけ終わってない
DrawFormatString(420, 640, GetColor(255, 185, 185), "COMPETED! PUSH ANY BUTTON to SKIP");
if( CheckHitKeyAll() != 0){
break;
}
}
}
//読み込チェック
if (CheckHandleASyncLoad(handle) < 0) { error++; }//全ハンドルについて行う
if (error > 0) {
DrawFormatString(500, 330, GetColor(255, 0, 0), "注意!%d個のファイルの読み込みに失敗しました。", error);
DrawFormatString(500, 400, GetColor(255, 0, 0), "何かキーを押してスタートします。");
ScreenFlip();
WaitKey();
}
SetUseASyncLoadFlag(FALSE);
StopSoundMem(mov_bgm);
DeleteSoundMem(mov_bgm);