“Der C++ Programmierer“ schwierig?



  • @chris4cpp sagte in “Der C++ Programmierer“ schwierig?:

    Ne ich brauche leider eine richtige GUI, bei mir läuft Audio und Grafik in Echtzeit. Wenn da irgendwas zickt oder unnötig kopiert wird etc. merke ich das sofort an Aussetzern oder höhere CPU-Last.

    Ich bin mir nicht sicher ob ich dich richtig verstehe, aber... was hat das mit der GUI zu tun? Grundsätzlich sollte das Audio-Gedöns in einem eigenen high-priority Thread laufen. Und der sollte idealerweise nur non-blocking mit anderen Threads kommunizieren. Bzw. wenn man doch mal was locken muss dann:

    • kurz halten (in allen Threads)
    • in allen non-audio Threads die die selbe Mutex locken müssen die Prio vorher auf die des Audio-Threads anheben (und nach dem Unlock natürlich wieder rückgängig machen)

    Die GUI darf dann zicken und CPU fressen wie sie lustig ist, Aussetzer darf das keine verursachen.

    Ansonstn wie gesagt so wenig OOP wie möglich.

    Ich glaub du hast ne komische Vorstellung davon was OOP bedeutet. OOP != sinnlos rumvererben.



  • Die GUI erwähnte ich weil von Ncurses gesprochen wurde.

    Wie man das sonst löst weiß ich nicht. Ich mache das so, wie ich denke, dass es funktionieren könnte und das tut es auch. Eigene Threads nutze ich bis jetzt nicht, da kein Bedarf. Ich habe eine Crossplattform Audiolib RTAudio, der ich eine Callback Funktion, mit dem zu füllenden Soundbuffer, übergebe. Ich glaube, dass die Audiolib einen Thread nutzt. Ab da an mache ich alles selbst, also das Audioprocessing. Die GUI arbeitet mit Qt. Sobald irgendwas nicht rund läuft höre ich das als Knackser / Aussetzer etc. und sehe das auch an der CPU Last, da konnte ich schon einige unnötige Kopien von Objekten vermeiden.

    Ist ein großes Lernprojekt, was bestimmt noch ein Jahr dauern wird bis es fertig ist. Am Ende weiß ich was ich alles von C++ und OOP brauche und auf was ich getrost verzichten kann.

    Ich habe eine komische Vorstellung von OOP? Bitte kläre mich auf warum. Ich setze von OOP folgendes derzeit ein:

    • Kapselung von Daten und Methoden und deren Sichtbarkeit
    • Polymorphie. also Basisdatentyp aufnehmen und je nach konkreter abgeleiteten Klasse werden dann die spezifischen Methoden aufgerufen.
    • Observer Pattern(was ja Kapselung und Polymorphie einsetzt)
    • RAII z.B. in der Loggerklasse um ein Filestream wieder zu schließen. Vorher hatte ich noch RAII mit new im Konstruktor und delete im Destruktor. Das ist komplett weg und ich nutze nur noch Smartpointer und std::array

    Mehr nutze ich von OOP nicht. Ich habe mir auch vorher keinerlei Plan gemacht wie die Objekte miteinander kommunizieren. Was ich brauche und wie was miteinander kommuniziert hat sich ,während des Projekt wuchs, ergeben. Alles so einfach und übersichtlich wie möglich und weniger auf alle möglichen späteren Erweiterungen ausgelegt.

    Mein Ziel ist es mit meinem Kenntnisstand so schnell wie möglich etwas funktionierendes zu entwickeln, wo ich nicht den Überblick verliere. Bis jetzt ist das rund 500kb Quellcode und alles funktioniert wie gewünscht. Wenn ich an Grenzen stoße muss ich selbstverständlich meine Art an das Projekt, C++ oder OOP ran zu gehen ändern, aber bis hierhin ist alles recht machbar.

    Aber bitte man lernt ja nie aus. Was ist an meiner Auffassung von OOP komisch? (Weil ich nur einen Bruchteil davon nutze?)


Anmelden zum Antworten