Ich brauche ein FIFO-Objekt, das, wenn es ein Element hat, ein Ereignis generiert oder einen Rückruf zurückgibt, um zu informieren, dass ein Element verfügbar ist. Soweit ich das sehen kann, unterstützt std: queue dies nicht.Gibt es ein Objekt, das ich als FIFO mit Ereignis zum Auslesen von Daten verwenden kann?
In meinem Fall habe ich zwei Threads, die ein Thread Daten generieren und andere Thread benötigt, um sie zu verbrauchen.
Die Geschwindigkeit, mit der der erste Thread Daten erzeugt, ist nicht fest und daher muss ich einen Puffer haben, der die Daten speichert, damit der andere Thread sie lesen und relativ konstant verarbeiten kann.
Ich weiß, wie man den Schreiber implementiert, aber auf der Leserseite, Wenn ich die Warteschlange abfrage, dann verliere ich etwas Verarbeitungsleistung, um den Warteschlangenstatus zu überprüfen, und ich frage mich, ob es eine bessere Möglichkeit gibt, dies zu tun?
Edit 1
Es ist der Warteschlange nicht über Thread-Sicherheit, aber std :: Warteschlange basierend auf Abruf arbeitet, aber ich brauche etwas, das Ereignis basiert. std :: queue ist nicht ereignisbasiert und führt keinen Rückruf aus, wenn neue Daten verfügbar sind.
Suchen Sie den passenden STL-Container oder ein Muster? –
@RawN Irgendeine Lösung, anscheinend, wenn STL bereits einen Container hat, wäre es besser, sonst wie man einen implementiert. – mans
Es gibt eine Warteschlange und dann gibt es Deque. Wenn Sie darüber nachdenken, von der vorhandenen Klassenvorlage zu übernehmen, tun Sie das nicht. –