InterThreadKommunikation

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
hypnoticum
User
Beiträge: 132
Registriert: Dienstag 15. März 2011, 15:43

Hallo,
Ich habe einen Thread gestartet der wie folgt aussieht:

Code: Alles auswählen

class SerialThread(threading.Thread):
    def __init__(self, Prm): 
        self.Prm = Prm
        self.SerialOK = threading.Event()
        self.halt = threading.Event()
        threading.Thread.__init__(self)

    def run(self):  
        self.client = serial.Serial(  port = self.Prm['port'], 
                                      baudrate = self.Prm['baudrate'], 
                                      bytesize = self.Prm['bytesize'], 
                                      parity = self.Prm['parity'], 
                                      stopbits = self.Prm['stopbits'], 
                                      timeout = 60)
        
        buffer = ''
        i = 0
        
        if self.Prm['boot'] == 'true':
            boot = False
            while not boot:
                buffer = buffer + self.client.read(self.client.inWaiting())
                
                if buffer.count('\n') > i: 
                    lines = buffer.split('\n')
                    if self.Prm['print'] == 'true':
                        print lines[i] 
                    i = i + 1       
                    
                if buffer.rsplit('\n', 1)[-1].strip() == self.Prm['Prompt01']:
                    self.client.write(self.Prm['Login']) 
                    print buffer.rsplit('\n', 1)[-1].strip()
                    buffer = buffer + '\n' 
                    boot = True               
                        
        self.SerialOK.set()   
               
    def stop(self):
        self.halt.set()
        self.client.close()
nun starte ich einen zweiten Thread, der die Daten der seriellen Schnittstelle weiterverarbeiten soll:

Code: Alles auswählen

class GSM_ATA_Thread(threading.Thread):
    def __init__(self, Prm, client): 
        self.Prm = Prm
        self.client = client
        self.Connected = threading.Event()
        self.halt = threading.Event()
        threading.Thread.__init__(self)

    def run(self):    
        i = 0
        connected = False
        buffer = ''
        
        
        print "waiting for Call"
        while not connected:
            buffer = buffer + self.client.read(self.client.inWaiting())
            
            if buffer.rsplit('\n', 1)[-1].strip() == self.Prm['Prompt02']:
                self.client.write(self.Prm['SerialClient'])
                buffer = buffer + '\n'
               
            if buffer.count('\n') > i: 
                print '--------> ' + str(buffer.count('\n'))
                print '--------> ' + str(i)
                lines = buffer.split('\n')
                print lines[i]
                

                if lines[i].strip().upper() == self.Prm['A']:
                    self.client.write(self.Prm['C'])
                    buffer = buffer + '\n'
                    print 'accepted!'
  
                if lines[i].strip().upper() == self.Prm['B']:
                    self.client.write(self.Prm['D'])
                    buffer = buffer + '\n'
                    print 'aborted!'
                    
                i = i + 1
  
        print "GSM_ATA_Thread terminated" 
irgendwie wird der Text zum Prm['A'] nie erkannt, bzw ich verstehe die Ausgabe nicht ganz.
sollte ich das anders machen?
Danke
hypnoticum
User
Beiträge: 132
Registriert: Dienstag 15. März 2011, 15:43

Hat sich erledigt. Ich hatte Formatierungszeichen in den Strings die detektiert werden sollten und musste Verzögerungen bei den threads berücksichtigen.
Antworten