Was ist die grundlegende Struktur eines Ereignis-Loop-System in C++ 11? Wie werden die Schlüsselelemente (wie Message Queue, Message Dispatcher, Signal) implementiert? Zum Beispiel, brauche ich noch eine std::queue<Message>
, eine std::mutex
und eine std::condition_variable
als was habe ich in C++ 98 + boost Weg? Auch die Leistung spielt in der von mir angestrebten Lösung eine Rolle.Die C++ 11 Möglichkeit, eine Ereignisschleife zu erstellen
6
A
Antwort
2
Tun Sie es ungefähr so, wie Sie es in C++ 98 getan hätten. Sie können plattformspezifische Dinge wie pthread_t, pthread_mutex und pthread_cond durch standardisierte Äquivalente ersetzen (std :: thread, std :: {rekursive _,} {timed _,} mutex und std :: condition_variable {, _ any}), aber die Grunddesign ist das gleiche.
Wie @Beerboy erwähnt, Boost.Asio könnte ein guter Ort sein, um zu starten, obwohl AFAIK es für C++ 11 noch nicht aktualisiert wurde.
Verwandte Themen
- 1. Erstellen Sie eine Observable für eine Ereignisschleife
- 2. Bietet C++ 11, 14 oder 17 eine Möglichkeit, nur die Argumente aus einem decltype() zu bekommen?
- 3. Eine externe Ereignisschleife mit Qt
- 4. Gibt es eine Möglichkeit, einen Rückgabewert in C++ 11 abzugleichen?
- 5. Einfachste Möglichkeit, eine Zeichenfläche aus einer C++ - DLL zu erstellen?
- 6. Head First C#: seltsame Möglichkeit, eine schreibgeschützte Eigenschaft zu erstellen
- 7. Schnelle Möglichkeit, eine Liste von Werten in C# zu erstellen?
- 8. C++ 11 Lambdas zu Funktionszeiger
- 9. Gibt es eine Möglichkeit, eine static_assert in einen Ausdruck in ISO C++ 11 zu gleiten?
- 10. Dart: Verwendet einen Null-Zeit-Timer die unterstützte Möglichkeit, Arbeit auf die Ereignisschleife zu verzögern
- 11. Einfachste Möglichkeit, einen Threadpool in C++ zu erstellen?
- 12. Fehler beim Erstellen einer untergeordneten Ereignisschleife
- 13. Portierung Isnan zu C++ 11
- 14. PowerShell: eine elegante Möglichkeit, Verschlüsse zu erstellen
- 15. Gibt es eine Möglichkeit, ein Projekt nur für ein C# -Projekt zu erstellen oder zu erstellen
- 16. Die effizienteste Möglichkeit, Thumbnails zu erstellen?
- 17. C++ 11 Möglichkeit, Vorlage für die Auswahl größerer Integer-Typ zu schreiben?
- 18. Magento EDA-System, wie Ereignisschleife zu vermeiden?
- 19. Gibt es eine bessere Möglichkeit, solche Listen zu erstellen?
- 20. Gibt es eine Möglichkeit, die C# -Bindung statisch zu machen?
- 21. Gibt es eine Möglichkeit, die Suchbegriffe zu kommentieren? C#
- 22. Ist dies die Möglichkeit, eine synchrone Bibliotheksfunktion zu erstellen, ohne einen Hintergrund-Thread zu erstellen?
- 23. Gibt es eine Möglichkeit Anzahl von Threads zu bekommen, die ich in C# erstellen
- 24. C: clevere Möglichkeit, eine Matrix zu "verschieben"?
- 25. Effiziente Möglichkeit, eine Zeichenkette zu token - C
- 26. C++ 11 Zeichenfolge Initialisierung
- 27. C++ 11 in vxworks
- 28. C++ 11 Schließung shared_ptr
- 29. Gibt es eine sichere Möglichkeit, C++ 11 Smart Pointer und die Schnittstelle für Raw Pointer zusammen zu verwenden?
- 30. Gibt es eine Möglichkeit, eine benutzerdefinierte Toastbenachrichtigung zu erstellen?
Im Standard gibt es keine High-Level-Klassen wie Nachrichtenwarteschlangen. Sie müssen also Ihre eigenen Typen aus den genannten Typen erstellen. – juanchopanza
Wenn die Leistung wichtig ist, bleiben Sie bei den Mechanismen, die für das Zielbetriebssystem vorgesehen sind. Verwenden Sie zum Beispiel "kqueue", wenn Sie OS X anzielen, oder "epoll", um unter Linux die besten Ergebnisse zu erzielen. C++ 11 hat damit nichts zu tun. –
Wenn Sie Boost bereits verwenden, können Sie Boost.Asio verwenden. – beerboy