Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Probestudium / 2015 / WS I: 3D-Programmierung / Skripte / Beispiel_zu_Threads.py


Inhaltsbereich

Beispiel_zu_Threads.py

Python Source icon Beispiel_zu_Threads.py.py — Python Source, 2 KB (2923 bytes)

Dateiinhalt

from visual import *
from threading import Thread
from time import sleep

ZEIT = 5


class RotationsKugel(Thread):                           # Eine Kugel wird um einen Pfeil rotiert, nach einer gewissen Zeit
                                                        # aendert sich die Richtung
    def __init__(self):                                 # Konstruktor
        Thread.__init__(self)                           # Konstruktor Oberklasse
        self.kugel = sphere(pos=(3,0,0), material=materials.earth)          # die Kugel
        self.pointer = arrow(pos=(0,-5,0), axis=(0,10,0), shaftwidth=0.1)   # der Pfeil
        self.anzeige_zeit = label(box = False, color = color.white, pos = (0, 5.3, 0), text = "Zeit: " + str(ZEIT)) # Anzeige Zeit
        self.winkelrichtung = 1                         # die Drehrichtung
    
    def run(self):                                      # wird nach start() ausgefuehrt
        while True:
            rate(20)
            self.kugel.rotate(angle=radians(3*self.winkelrichtung),origin=(0,0,0), axis=(0,1,0)) # die Rotation
        

class Zeit(Thread):                                     # Zeitdauer der Rotation in eine Richtung
    def __init__(self,kugel):                           # Konstruktor
        Thread.__init__(self)                           # Konstruktor der Oberklasse
        self.zeit = ZEIT                                # Attribut der verwendeten Sekunden
        self.view = kugel                               # Referenzattribut zur Klasse RotationKugel
        
    def run(self):                                      # wird nach start() ausgefuehrt
        while True:
            
            self.view.sekunden = self.zeit              # setze Zeit 
            while self.view.sekunden >= 0:              # verbleibt noch Zeit?
                self.view.anzeige_zeit.text = "Zeit: " + str(self.view.sekunden) # Anzeige Zeit als Text
                sleep(1)                                # warte 1 Sekunden
                self.view.sekunden = self.view.sekunden - 1  # Zeitdauer um 1 Sekunde verringern
            self.view.winkelrichtung *= -1              # Drehrichtung aendert sich
            self.view.sekunden = self.zeit              # Zeit wieder auf Startwert zurueckgesetzt

if __name__ == "__main__":                              # wurde Python-Programm gestartet? dann fuehre aus...
    drehkugel = RotationsKugel()                        # erzeuge Kugel
    scene.autoscale=False                               # keine automatische Skalierung
    z = Zeit(drehkugel)                                 # Objekt der Klasse Zeit mit Referenzattribut zur Klasse RotationsKugel
    drehkugel.start()                                   # starte Methode run der Klasse RotationsKugel
    z.start()                                           # starte Methode run der Klasse Zeit
            



Funktionsleiste