Ich weiß nicht, was Ihre Interviewer hören wollten und ich hoffe, das ist kein Thema, aber wenn ich jemanden interviewe, würde ich Punkte für das Wissen über die Vor- und Nachteile von bestehenden Frameworks geben, bevor Sie Ihre eigenen rollen, besonders in diesem Maßstab.
C++ Alternativen (wenn Sie sie verwenden können, vielen Dank für den Hinweis auf glglgl, dass Sie scheinen C zu wollen) wären:
Boost.MSM obwohl unglaublich schnell ist bei diesem Maßstab nicht in Frage. Gründe sind die Kompilierzeit, mpl :: vector/list constraints und weil Sie eine gigantische Quelldatei haben würden.
Boost.Statecharts mit 100 Staaten arbeiten, aber 100 Veranstaltungen pro Zustand würde max aus dem mpl :: vector/Liste Einschränkungen. Persönlich, wenn ich 100 Ereignisse in einem Zustand hätte, würde ich versuchen, sie trotzdem zu gruppieren und benutzerdefinierte Reaktionen zu verwenden, aber das hängt natürlich von der Anwendung ab.
Ich sehe keinen Grund, warum Zustandsmaschine Qt nicht so groß skaliert würde (bitte korrigiert mich wenn ich falsch liege), aber seine Größenordnung langsamer, damit ich es nie verwenden.
Die einzige gute C Alternative, die ich kenne, ist:
QP, die in C und C++ verfügbar ist und so groß skaliert werden kann, hat eine gute Organisation und ist „mehr als eine Zustandsmaschine“, dass es Ereignis behandelt Warteschlangen, Nebenläufigkeit und Speicherverwaltung usw. Das eigene Rollen kann eine bessere Leistung bringen (abhängig von Ihrer Geschicklichkeit und wie viel Zeit Sie hineinlegen), aber es sollte angemerkt werden, dass die Speicherverwaltung der Ereignisse wahrscheinlich mehr Optimierung benötigt als die Implementierung der Zustandsmaschine ist es selbst. QP macht das für dich und ganz gut.
Funktion Zeiger scheint der einzige gültige Ansatz in diesem Fall. Ja, es ist ein schneller Zugriff, aber es ist eine modulare und flexible Lösung. –
Ich kann mir nicht vorstellen, 100 Zustände hart zu kodieren, ich würde sie lieber bei der Initialisierung einer Zustandsmaschine hinzufügen. Dies vermeidet 10 Bildschirme lange if-else/switch-case leiter und macht das Testen und Modifizieren * viel * einfacher –
Nicht sicher, ob das den Interviewer zufriedenstellen würde, aber bei der Arbeit würde ich einfach [Ragel] (http: //www.complan.org/ragel/). Sie erhalten blitzschnelle Geschwindigkeit (z. B. 'goto'-basiert) * und * einfacheres Debuggen (Ragel kann den Zustandsübergangsgraphen in ein Punktformat ablegen, um von Graphviz konsumiert zu werden). – unthought