我有一个deque
个结构(每个结构包含一个int
id和一个std::chrono::time_point<std::chrono::system_clock>
时间戳记:在一定的超时后,从deque
中删除了已超时的结构
我想到了一种不同的方法:不是让一个循环遍历deque
的线程来检查其中每个结构的超时,我可以将对象类放在deque
中:当构造函数时调用此类,并将对象推入deque
,调用此类的方法;当对象从睡眠状态恢复时,此方法将使对象休眠std::this_thread::sleep_for(std::chrono::milliseconds(/*#define TIMETOUT*/));
,它会向等待“condition_variable”的线程发送信号。
我读了一个关于类对象队列的question(这让我发现了包装类),但我不明白一些事情:当我从deque
中删除时,会返回什么?参考?对象本身?我需要删除该对象,因为我必须将其插入另一个deque
。
如果真的需要包装器,我如何为我的目的正确创建一个类?
答案 0 :(得分:1)
首先,任何类型的睡眠功能都不会帮助你:它会冻结整个线程,而不是一个对象。如果您不知道线程是什么以及如何使用它们,那么您的程序是单线程的,当您调用sleep函数时整个程序将冻结。
然后,当您从双端队列中删除某些内容时,deque::erase()
会将迭代器返回到队列中的下一个对象。当您在循环中遍历队列并且想要删除某些内容时,这非常有用。
如果要在某处复制对象,则需要先执行此操作。删除后,无法复制。
最后,关于包装类:我不知道为什么你需要在这里使用它们。在从第一个删除if之前,您可以手动将对象添加到其他队列。