Was ist eine globale Variable und warum soll man sie nicht benützen?
@Alfons Mittelmeyer: bei einer Kommunikation sind mindestens zwei beteiligt. Jetzt fängst Du an, etwas zu verstecken, so dass nur einer drauf zugreifen kann. Das ergibt wirklich keinen Sinn. Das einfachste, damit zwei kommunizieren können, ist, dass derjenige, der die Kommunikation initiiert, den Kanal als Argument übergibt.
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
Also die Queue habe ich ja versteckt, nämlich in einem anderen Objekt. aber das verlagert ja nur das Problem, dafür gibt es eben dann dieses andere globale Objekt.Sirius3 hat geschrieben:@Alfons Mittelmeyer: bei einer Kommunikation sind mindestens zwei beteiligt. Jetzt fängst Du an, etwas zu verstecken, so dass nur einer drauf zugreifen kann. Das ergibt wirklich keinen Sinn. Das einfachste, damit zwei kommunizieren können, ist, dass derjenige, der die Kommunikation initiiert, den Kanal als Argument übergibt.
Normalerweise sendet man eine Message etwa mit:
Code: Alles auswählen
comm.send(message_id,parameter)
Code: Alles auswählen
comm.proxy.send(message_id,parameter)
@Alfons Mittelmeyer: Dann geht es nicht um die Queue, sondern dass das `comm`-Objekt jetzt globalen Zustand besitzt. Also müsste man den Kommunikationspartnern *dieses* Objekt als Argument übergeben, damit die nicht auch hart kodiert von diesem globalen Zustand abhängig sind. Beziehungsweise sollte es möglich sein so einem Objekt die Queue zu übergeben und mehrere davon zu erstellen, damit es nicht dieses eine globale Objekt mit globalen Zustand gibt.
-
- User
- Beiträge: 1715
- Registriert: Freitag 31. Juli 2015, 13:34
@BlackJack: Es gibt ja auch kein globales Objekt auf das alle zugreifen. Jeder Kommunikationpartner bekommt eine eigene Instanz. Nur die GuiApp importiert die erweiterten Widgetklassen und dort wird dann auch das übergebene Proxy Objekt abgespeichert, damit man in der GuiApp bequem send ohne eine unötige Referenz auf ein Widget benützen kann. Was hätte auch Nachricht senden mit einem Widget zu tun
Bei nur zwei Kommunikationspartnern wird jeweils ein eigenes Proxyobjekt übergeben, wobei das eine das andere kennt. Bei mehr als zwei Kommunikationspartnern wird jeweils ein Proxyobjekt übergeben, welches ein zentrales Proxyobjekt kennt, und das ist auch nicht global. Die Kommunikationspartner wissen also überhaupt nichts über die anderen.
Für die GuiAppp ist es auch kein Problem, denn wer macht schon etwa:
gui_1 = tk.Tk(Proxy())
...
gui_2 = tk.Tk(Proxy())
....
gui_1.mainloop()
gui_2.mainloop()
Bei nur zwei Kommunikationspartnern wird jeweils ein eigenes Proxyobjekt übergeben, wobei das eine das andere kennt. Bei mehr als zwei Kommunikationspartnern wird jeweils ein Proxyobjekt übergeben, welches ein zentrales Proxyobjekt kennt, und das ist auch nicht global. Die Kommunikationspartner wissen also überhaupt nichts über die anderen.
Für die GuiAppp ist es auch kein Problem, denn wer macht schon etwa:
gui_1 = tk.Tk(Proxy())
...
gui_2 = tk.Tk(Proxy())
....
gui_1.mainloop()
gui_2.mainloop()