Status Abfragen während des Programmflusses

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hard_Veur
User
Beiträge: 14
Registriert: Dienstag 16. Mai 2017, 14:31

Wie kann ich eine Status abfrage oder auch mehrere machen während das Programm z.B. ganz normal weiter läuft?
Also z.B. wenn ich ein Programm hab was irgendwas tut... und auf einmal drücke ich 'T' und jetzt mach das Programm darauf hin was anderes also sobald press_T true ist soll das Programm was machen und wenn press_A true ist macht es das nächste. Ich will aber nicht das ganze Programm Loopen und alles in if Anweisungen packen. Hatte was ähnliches hier schonmal gesehen sie wollten es lösen indem sie 2 while schleifen irgendwie parallel laufen lass und in jeder schleife jeweils einen Wert abfragen und sobald dieser auf true geht sollte eine Variable um 1 erhöht werden. Dies möchte ich aber nicht, da ich nicht alles loopen will.
Hatte jetzt ein zweimal Multiagentsystem (MAS) irgendwo gelesen.(Hat das was damit zu tun oder was ist das überhaupt???)
Und ist das vlt. ein allgemeines Problem der Informatik, gibt es zur Lösung vlt. Pseudocode.
Ich kann mir nämlich nicht vorstellen das riesen Programme die nur reagieren wenn Werte auf true fallen alle durch gehend geloopt sind oder?!
BlackJack

@Hard_Veur: Doch, wenn etwas wiederholt werden soll, braucht man Schleifen. Solche Programme strukturiert man oft über eine Ereigniswarteschlange und einer Schleife die dann die Ereignisse abarbeitet. Die üblichen GUI-Rahmenwerke haben so eine Schleife. Bei `Tk` heisst die Funktion in der die Schleife ausgeführt wird `mainloop()`, bei Gtk `Gtk.main()`, und bei Qt ist das die `exec_()`-Methode.
Hard_Veur
User
Beiträge: 14
Registriert: Dienstag 16. Mai 2017, 14:31

Wie würde sowas aussen wenn ich sagen wir einen Input habe in meinem Programm und im Hintergrund eine Zustand sich nach 10s auf true ändert. Wenn man davon ausgeht das keiner was in den input eingibt. Dann soll das Programm durch die Änderung des Wertes einfach abbrechen. In die Main-Funktion zu schreiben geht ja nicht die wurde ja durch den input aufgehalten. Wie kann das Programm nun reagieren???
Ich kenne das nur aus der IOS Programmierung das ich halt genau auf einzelne Aktion Wertänderung reagieren kann ohne großartig was zu loopen.
BlackJack

@Hard_Veur: Ich bin mir ja ziemlich sicher das IOS auch eine Ereignisschleife hat.

Das Problem ist IMHO noch zu vage um sagen zu können *so* macht man das. Beschreibe doch mal konkreter was Du machen willst.
Hard_Veur
User
Beiträge: 14
Registriert: Dienstag 16. Mai 2017, 14:31

Hatte jetzt noch kein richtiges Beispiel. War mehr so eine Art Gedanken Experiment.
Aber ein Beispiel wäre nun das ich ein ferngesteuertes Auto mit z.B. dem Pi Steuere und das Programm läuft und empfängt Befehle von der Fernbedienung jetzt soll aber sobald ich eine Taste drücke das Auto autonom fahren also muss das Programm normal laufen und Befehle empfangen bis press_auto_key == true ist, dann soll das die Funktion autonome_mode() aufgerufen werden.
BlackJack

@Hard_Veur: Wie soll denn der Tastendruck erkannt werden? Mit etwas das schon eine Schleife zum abarbeiten von Ereignissen hat oder wo man so etwas selber schreiben muss?
Hard_Veur
User
Beiträge: 14
Registriert: Dienstag 16. Mai 2017, 14:31

Na das ist ja eigentlich der Teil meiner Frage wie kann ich das machen das sowas erkannt wird und ich darauf reagieren kann ohne großartig Ressourcen zu reizen und ohne meinen Programmfluss großartig aufzuhalten also das ich während dessen mein Programm läuft wie z.B. Befehle von Fernbedienung erhalten trotzdem die Abfrage und Erkennung des des Wertes laufen lassen kann.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Man macht sowas genauso wie Blackjack beschrieben hat, mit einer Eventloop. Üblicherweise hat man die ohnehin schon z.B. durch das GUI Framework ansonsten würde ich empfehlen dir mal Twisted anzuschauen.
Hard_Veur
User
Beiträge: 14
Registriert: Dienstag 16. Mai 2017, 14:31

Twisted ist mehr für Netzwerk basierte Sachen oder?
Antworten