Welche Softwarestruktur? Welches Framework? (C++, Windows)



  • Hallo allerseits,

    ich benötige Hilfe bei der Strukturierung eines Projektes. Mir fehlt leider die Erfahrung in der Programmierung einer Applikation, wie ich sie im Folgenden beschreibe.
    Die Applikation soll in C++ programmiert werden und unter Windows XP laufen. Eine GUI soll Eingriffe durch den Benutzer entgegen nehmen, aber vor allem Feedback über die Zustände in der Applikation geben.
    Im Hintergrund soll über eine Socket-Schnittstelle eine primitive TCP/IP-Kommunikation laufen, die Daten mit einem anderen Computer austauscht.
    Eine API einer anderen Software soll genutzt werden um zyklisch/permanent Daten auszutauschen. Die beiden Datenquellen sollen von der Applikation dann geeignet verarbeitet werden.

    fremde Software <---API---> eigene Applikation <---TCP/IP---> Computer2
    

    Meine Frage ist nun, hinsichtlich welcher Frameworks ich mich umschauen sollte?

    Eine GUI ist sehr einfach mit "Windows-Forms-Anwendung" in Visual Studio gebaut. Ich komme aber ins Stocken, weil die gesamte Applikation in Application::Run läuft und ich nicht weiß, wo/wie ich die API und die Socket-Schnittstelle einbinden kann (sollen schließlich permanent im Hintergrund laufen).
    Mit MFC habe ich überhaupt noch nicht gearbeitet und daher kann ich nicht einschätzen, ob es die richtige Wahl wäre.

    Ich hoffe ihr könnt mir ein paar Ratschläge geben. Wie könnte ich dir Software elegant aber simpel strukturieren?



  • Eine GUI ist sehr einfach mit "Windows-Forms-Anwendung" in Visual Studio gebaut.

    Nimm nicht Windows Forms, das wäre C++/CLI und deren einzige Berechtigung ist Interop zwischen managed / unmanaged Code.
    [EDIT]
    Ausserdem hast Du eine zusätzliche Abhängigkeit, nämlich das .NET Framework. Das ist ansich nicht schlimm (je nach Betrachtung) - stellt sich nur die Frage warum nicht gleich mit C#.

    Nimm irgend einen nativen GUI Toolkit (wie wxWidgets, Qt, WTL, MFC, GTK, ...).

    Für die TCP Kommunikation empfehle ich eine bestehende Library wie z.B. Boost.Asio, POCO, SFML, etc. zu nehmen. (Kommt auch auf die Lizensierung an.)

    Ich komme aber ins Stocken, weil die gesamte Applikation in Application::Run läuft und ich nicht weiß, wo/wie ich die API und die Socket-Schnittstelle einbinden kann (sollen schließlich permanent im Hintergrund laufen).

    Das Problem hast Du nicht nur bei Windows Forms, sondern bei allen GUI Toolkits die einen Event bzw. Message Loop hast. Um die Event / Message Verarbeitung nicht zu blockieren muss man andere Threads benutzen - das kann man auf verschiedene Arten tun. Mit Boost.Asio kannst Du z.B. die Asynchronen Methoden benutzen (sehr elegant).

    Gruss Simon


Log in to reply