|
|
От: |
VVV
|
|
| Дата: | 10.09.19 10:55 | ||
| Оценка: | |||
понял как "пример предоставленного ТОБОЙ кода".пример предоставленного кода
использоваться не должен! К тому же, у тебя нет функции для изменения этого таймаута.эффективный, быстрый
void Process()
{
while (running)
{
continue;
}
} while (running)
{
if (!links.get(iter, link)) {
++iter;
continue;
}
//
// в этом временном интервале может случиться Unsubscribe и удаление консумера из памяти
//
try {
auto value = Dequeue(link.mKey);
if (value)
link.mConsumer->Consume(link.mKey, value); //<<<=== тут указатель mConsumer может быть уже "протухший"
}
catch (...) {
}
}struct IConsumer
{
virtual ~IConsumer() noexcept {} // <<<=== не нужен здесь.
virtual void Consume(Key const &key, std::shared_ptr<Value> value) = 0;
};