class Task { public: virutal ~Task() {} virtual void exec() = 0; virtual void draw() const = 0; virutal bool needGC() const = 0; };

void GameFrame::doMainLoop() {
 // シングルトン系の処理実行
 g_pad.exec(); // パッド入力処理
 g_file_loader.exec(); // ファイル非同期読み込み処理
 // その他の処理実行
 std::for_each(m_task_list.begin(), m_task_list.end(), boost::bind(&Task::exec, ::_1));
 std::for_each(m_task_list.begin(), m_task_list.end(), boost::bind(&Task::draw, ::_1));
 m_task_list.remove_if(boost::bind(&Task::needGC, ::_1));
}

こんな感じだと思うが。ファイルの読み込みは Task 派生クラスの exec の中で

TestTask1::exec() {
  switch (m_state) {
  case INIT:
    g_loader.load("file1.arc");
    ++m_state;
    break;
  case LOADING:
    if (g_loader.isLoaded("file1.arc"))
      ++m_state;
    break;
  case MAIN:
    ...
}

って感じで。マジメに作るとファイルは事前にアーカイブ&圧縮しておいて、ロード時に
展開するとか、そもそも名前ではなく #define シンボルで扱えるようにして下らないバグを
出さないようにするとか、断片化防ぐためにメモリのセグメント分割するとか、いろいろ
あるけど。