void work()
    {
        try {
            m_rou(pstade::perfect<void>(
                boost::lambda::bind(&self_t::yield, this, boost::lambda::_1)
            ));
        }
        catch (exit_exception const&)
        { }

        boost::mutex::scoped_lock lock(m_mutex);
        m_status.set(is_end::value);
        m_cond.notify_one();
    }