void boost_strand::run_tick_back() { assert(ready_empty()); if (!_backTickQueue->empty()) { shared_strand lockThis = _weakThis.lock(); size_t tickCount = 0; do { wrap_next_tick_base* tick = _backTickQueue->front(); _backTickQueue->pop_front(); auto res = tick->invoke(); if (-1 == res._size) { _nextTickAlloc.deallocate(res._ptr); } else { _reuMemAlloc.deallocate(res._ptr, res._size); } } while (!_backTickQueue->empty() && ++tickCount <= _thisRoundCount); std::swap(_frontTickQueue, _backTickQueue); if (!_frontTickQueue->empty() && waiting_empty()) { post([lockThis]{}); } } }
bool StrandEx_::empty() { return ready_empty() && waiting_empty(); }