ich habe Timer in meiner app, während Callback seine Funktion jedes 100MMS mit:C++ 11: Wie von Vektorschleife aktualisiert zu verhindern, während ohne Sperren Iterieren
timer_ptr new_timer = lib::make_shared<lib::asio::steady_timer>
jetzt in Seiten diese Schleife i-Schleife haben, die iterieren Vector und Aktualisierungen für seine Mitglieder.
//copy the members which are relevant in this point in time
con_list m_connectionsLocalTmp = m_global_connections;
for (const auto it : m_connectionsLocalTmp)
{
...
...
}
Der m_global_connections Vektor in der Anwendung keiner gefüllt werden stoppen
so jeder Timer-Rückruf i die Elemente kopieren, die zu diesem Zeitpunkt relevant sind, ich weiß, es ist nicht effizient, aber ich fand keinen besseren Weg, , das Problem ist was passiert, wenn der Timer erneut aufgerufen und die Schleife nicht beendet ist, sondern es aus
con_list m_connectionsLocalTmp = m_global_connections;
und jetzt Looping es neue Reihe von Elementen aktualisiert.
Wie kann ich diese Logik im Callback bestellen?
Warum ist der Austausch besser, dann einfach Vektor in Vektor kopieren? – user63898
auch ich muss die m_global_connections beibehalten, wie es ist, wie es das Verbindungsrepository der App – user63898
Die 'Swap' ist besser, da es zwei Zeiger austauscht. Die Dokumentation besagt: "ruft keine Vorgänge zum Verschieben, Kopieren oder Austauschen einzelner Elemente auf." –