Co-operative Tasks

class Task {
  virtual void Run() = 0;
};
class Renderer : public Task {
    void Run(float time);
};
class TaskManager {
    void RunTasks();
    void AddTask(Task*);
};

void TaskManager::RunTasks() {
    foreach(task)
      task->Run();
  }