2011-09-14 33 views
0

我的问题是关于正在运行的最后期限计数器,等待由相同函数表示完成一些操作,但我知道dont't,在释放我的线和期限由对象截止时间安全完成奥德中断后出。什么时候可以发生?超时后何处销毁线程和deadline_timer对象?

boost::asio::deadline_timer* mDeadline1; 
boost::asio::deadline_timer* mDeadline2; 
boost::thread* mThread1; 
boost::thread* mThread2; 

// start deadline timers 
mDeadline1 = new boost::asio::deadline_timer(_io_service, boost::posix_time::seconds(2)); 
mDeadline1->async_wait(&MyClass::DeadlineTimedOut, this); 

mDeadline2 = new boost::asio::deadline_timer(_io_service, boost::posix_time::seconds(2)); 
mDeadline2->async_wait(&MyClass::DeadlineTimedOut, this); 


// Run operations in threads 
mThread1 = new boost::thread(&MyClass::DoSomething, this); 
mThread2 = new boost::thread(&MyClass::DoSomething, this); 
// ... 

void MyClass::DoSomething() { 
    // Do something time expensive and sleep, etc. for interrupt point ... 

    // which to cancel here!? 
    mDeadline->cancel(); 
    delete mDeadline; 
} 

void MyClass::DeadlineTimedOut(const boost::system::error_code& pErrorCode) { 
    if(pErrorCode == 0) { // deadline timed out 

    // which to interrupt here? 
    mThread->interrupt(); 
    } 

    if(pErrorCode == 995) { // deadline cancelled from outside 

    } 
} 

有没有人建议?优雅,B.

回答

2

因为他们的立场计时器是毫无意义的 - 只有你知道它们的意思和他们所应该做的 - 所以你必须决定要取消什么。至于清理,追究他们在scoped_ptrshared_ptr,他们将被自动地清理时范围/最后一个引用完成。

+0

+1'shared_ptr'并自动 –