【发布时间】:2015-01-22 08:40:39
【问题描述】:
我需要使用生存时间参数维护几个对象,并在它们超时时触发某种事件。
将此实现为一个计时器,它只等待具有最小 TTL 的对象,然后再将其从队列中弹出,这似乎不是很有效,因为我需要能够偶尔从该队列中添加/删除对象(他们可以有任何超时值),可能在超时之前。例如,如果我认为最短的 TTL 对象是 10 秒并阻塞超时线程 10 秒,但在此期间将一个具有 3 秒生存时间的对象添加到队列中,则会发生丑陋的事情。
天真的做法
while (true) {
update()
}
void update() {
// get delta since last call to update()
// subtract delta from each object and time out if ttl < 0
}
非常慢,因为有大量内存被洗牌,其唯一目的是在微秒分辨率上更新 ttl。
有没有不为每个对象创建单独线程的好方法?
我可以访问 C++11 标准库,但没有 boost 或任何外部库。
【问题讨论】:
标签: c++ multithreading timeout