.pop()
에서 차단하는 자체 큐를 구현하고 있습니다. 또한이 함수는 시간 초과 인 추가 인수를 허용합니다. 그래서 그 순간 나는 다음과 같은 코드를 가지고있다.throwing exception 대 리턴 코드
template <class T>
class BlockingQueue {
private:
std::queue<T> m_queue;
std::mutex m_mutex;
std::condition_variable m_condition;
public:
T pop(uint64_t t_millis) {
std::unique_lock<std::mutex> lock(m_mutex);
auto status = m_condition.wait_for(
lock,
std::chrono::milliseconds(t_millis),
[=] {
return !m_queue.empty();
}
);
if (!status) {
throw exceptions::Timeout();
}
T next(std::move(m_queue.front()));
m_queue.pop();
return next;
};
}
exceptions::Timeout
은 나의 예외 다. 이제는 성능 측면에서 던져지는이 예외에 대해 생각 해왔다. 이 함수에서 어떤 종류의 반환 코드를 반환하는 것이 더 좋을까요? 성능에 어떤 영향을 줍니까?
또한 .pop
은 이미 리턴 코드를 어떻게 구현합니까? 나는 T
과 리턴 코드를 모두 가지고있는 새로운 구조가 필요할 것이라고 생각한다. 복잡성의 증가가 그만한 가치가 있습니까?
예외적 인 경우가 있습니까? 그렇다면 예외를 throw하십시오. 그렇지 않다면, 다르게 구현하십시오. –
[FYI]'pop'에서 대기열 항목을 반환하고 싶지 않을 수도 있습니다 : http://stackoverflow.com/questions/25035691/why-doesnt-stdqueuepop-return-value – NathanOliver
값을 반환하는'pop()' *와 *는 예외를 던집니까? 좋아, 그렇다. –