ファイルのロードとメモリについて質問です。
!!!!!!!!!!!!!!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);