请教怎么实现boost timer的容器

请问如何实现boost timer的容器?
写了个小例程,想实现一个Timer容器,等待加入新的定时事件,但遇到的问题要么程序闪退,不等定时时间执行完毕,程序就退出了,要么被线程阻塞,根本无法继续执行,请问这段代码应该怎么修改?
程序流程为:
1、main函数new一个Channel类
2、Channel类在构造时向自己初始化的Timer容器加入新的定时事件
3、Container类,即Timer容器在接收到新的定时事件后进行监视,等待超时后调用其bind的回调函数。
4、这些都需要非阻塞方式来完成,请问下面程序应该如何修改?

// boostTimer.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>
#include <boost/function.hpp>
#include <boost/bind.hpp>
//#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time.hpp>
#include <boost/thread/thread.hpp>

namespace Timer {
enum Types
{
BuffTimer,
ChannelEventTimer,
EventTimer,
MapTimer,
PetTimer,
RecoveryTimer,
};

struct Id
{
int type, id, time;
Id(int type, int id, int time) : type(type), id(id), time(time) {

}
bool operator == (Id const &other) const {
return type == other.type && id == other.id;
}
};

class Container
{
public:
Container() : io(new boost::asio::io_service), strand(new boost::asio::strand(*io)) {
//strand = new boost::asio::strand(*io);
//io = new boost::asio::io_service;
//io->run();
//io->poll();
//boost::asio::io_service::work work(*io);
};
void addTimer(boost::function<void(void)>& f, _int64 second) {
io->reset();
boost::asio::deadline_timer t(*io, boost::posix_time::milliseconds(second));
//boost::asio::deadline_timer t2(*io, boost::posix_time::milliseconds(5000));
t.expires_at(t.expires_at() + boost::posix_time::milliseconds(second));
t.async_wait(boost::bind(f));
//t2.async_wait(boost::bind(f));
boost::asio::io_service::work work(*io);
boost::thread t1(boost::bind(&boost::asio::io_service::run, io));
//io->run();
t1.join();
};
~Container(){
std::cout << "析构了?\n";
};
private:
boost::asio::io_service* io;
boost::asio::strand* strand;
};


class Timer {
public:
//std::vector<boost::asio::deadline_timer> timers;
Timer(boost::function<void(void)> f, Id& id, Container* time, int counts, int second)/* : timer_(io, boost::posix_time::seconds(1)) */{
//int count = 0;
//while (1) {
// std::cout << count << "\n";
// count++;
// boost::asio::io_service io;
// boost::asio::deadline_timer t(io, boost::posix_time::seconds(1));
// //t.expires_at(t.expires_at() + boost::posix_time::seconds(1));
// t.async_wait(boost::bind(f));
// //boost::thread t1(boost::bind(&boost::asio::io_service::run, &io));
// //t1.join();
// io.run();
//}
time->addTimer(f, second);
};

void remove() {

};
private:
//boost::asio::io_service io;
//boost::asio::deadline_timer timer_;
};
};

class Channel {
public:
Channel() : times(new Timer::Container) {
std::cout << "Timer1\n";
new Timer::Timer(boost::bind(&Channel::changeEventTimer, this), Timer::Id(Timer::Types::ChannelEventTimer, 0, 0), getTimers(), 0, 1000);
std::cout << "Timer2\n";
new Timer::Timer(boost::bind(&Channel::changeEventTimer, this), Timer::Id(Timer::Types::ChannelEventTimer, 0, 0), getTimers(), 0, 1000);
};
~Channel(){};
void changeEventTimer() { std::cout << "changeEventTimer\n"; };
void stopTimer() { std::cout << "stopEventTimer\n"; };
Timer::Container* getTimers() {
return this->times;
};
private:
Timer::Container* times;
};

//void print(boost::asio::deadline_timer* t, int* count)
//{
// if (*count < 5)
// {
// std::cout << *count << "\n";
// ++(*count);
// t->expires_at(t->expires_at() + boost::posix_time::seconds(5));
// t->async_wait(boost::bind(print,
// t, count));
// }
//}

int main(int argc, _TCHAR* argv[])
{
//boost::asio::io_service io;
//int count = 0;
//boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
//t.async_wait(boost::bind(print, &t, &count));

//io.run();
//std::cout << "Final count is " << count << "\n";
Channel* channel = new Channel();

//new Timer::Timer(boost::bind(&Channel::changeEventTimer, channel), Timer::Id(Timer::Types::ChannelEventTimer, 0, 0), channel->getTimers(), 0, 60000);
//new Timer::Timer(boost::bind(&Channel::changeEventTimer, channel), Timer::Id(Timer::Types::ChannelEventTimer, 0, 0), channel->getTimers(), 0, 60000);