Changeset 133


Ignore:
Timestamp:
07/29/10 05:03:02 (11 years ago)
Author:
sc
Message:
  • exitThread() functions added to classes for better cleanup on SIG_INT
Location:
thinkgear_emulator
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • thinkgear_emulator/puzzlebox_thinkgear_serial_protocol.py

    r131 r133  
    235235                                buffer = '' 
    236236                                 
    237                                 self.keep_running = False 
    238                                 self.device.stop() 
    239                                 QtCore.QThread.quit(self) 
     237                                 
     238                                self.exitThread() 
     239                                #self.keep_running = False 
     240                                #self.device.stop() 
     241                                #QtCore.QThread.quit(self) 
    240242                                #sys.exit() 
    241243         
     
    683685                 
    684686                self.parseStream() 
     687         
     688         
     689        ################################################################## 
     690         
     691        def exitThread(self, callThreadQuit=True): 
     692                 
     693                try: 
     694                        self.device.stop() 
     695                except: 
     696                        pass 
     697                 
     698                #self.wait() 
     699                if callThreadQuit: 
     700                        QtCore.QThread.quit(self) 
    685701 
    686702 
     
    792808                 
    793809                device.flushInput() 
     810                #device.flushOutput() 
    794811                 
    795812                 
     
    843860                 
    844861                self.keep_running = False 
    845                 #self.device.close() 
    846                 #QtCore.QThread.quit(self) 
     862                self.buffer_check_timer.stop() 
     863         
     864         
     865        ################################################################## 
     866         
     867        def exitThread(self, callThreadQuit=True): 
     868                 
     869                self.stop() 
     870                self.close() 
     871                 
     872                if callThreadQuit: 
     873                        QtCore.QThread.quit(self) 
    847874         
    848875         
     
    864891                        try: 
    865892                                byte = self.device.read() 
     893                                 
     894                                if (len(byte) != 0): 
     895                                        if self.DEBUG > 2: 
     896                                                print "Device read:", 
     897                                                print byte 
     898                                                 
     899                                        self.buffer += byte 
     900                         
    866901                        except: 
    867902                                if self.DEBUG: 
    868903                                        print "ERROR: failed to read from serial device" 
    869904                                break 
    870                          
    871                         if (len(byte) != 0): 
    872                                 if self.DEBUG > 2: 
    873                                         print "Device read:", 
    874                                         print byte 
    875                                          
    876                                 self.buffer += byte 
    877                  
    878                  
    879                 self.device.close() 
    880                 QtCore.QThread.quit(self) 
     905                 
     906                 
     907                self.exitThread() 
     908 
     909 
     910##################################################################### 
     911# Functions 
     912##################################################################### 
     913 
     914def exitHandler(signal, frame): 
     915         
     916        if DEBUG: 
     917                print "exitHandler: Interrupt signal caught" 
     918         
     919        serial_device.exitThread(callThreadQuit=False) 
     920        protocol.exitThread(callThreadQuit=False) 
     921        sys.exit() 
    881922 
    882923 
     
    888929         
    889930        # Perform correct KeyboardInterrupt handling 
    890         signal.signal(signal.SIGINT, signal.SIG_DFL) 
     931        #signal.signal(signal.SIGINT, signal.SIG_DFL) 
     932        signal.signal(signal.SIGINT, exitHandler) 
    891933         
    892934        #log = puzzlebox_logger.puzzlebox_logger(logfile='server_thinkgear') 
  • thinkgear_emulator/puzzlebox_thinkgear_server.py

    r132 r133  
    138138                self.packet_queue = [] 
    139139                 
     140                self.serial_device = None 
     141                self.protocol = None 
     142                 
    140143                self.configureEEG() 
    141144                 
     
    527530                 
    528531                self.exec_() 
     532         
     533         
     534        ################################################################## 
     535         
     536        def exitThread(self, callThreadQuit=True): 
     537                 
     538                if self.serial_device != None: 
     539                        self.serial_device.exitThread() 
     540                 
     541                if self.protocol != None: 
     542                        self.protocol.exitThread() 
     543                 
     544                if callThreadQuit: 
     545                        QtCore.QThread.quit(self) 
     546                 
     547                sys.exit() 
     548 
     549 
     550##################################################################### 
     551# Functions 
     552##################################################################### 
     553 
     554def exitHandler(signal, frame): 
     555         
     556        if DEBUG: 
     557                print "exitHandler: Interrupt signal caught" 
     558                #print "signal:", 
     559                #print signal 
     560         
     561        server.exitThread(callThreadQuit=False) 
     562        sys.exit() 
    529563 
    530564 
     
    536570         
    537571        # Perform correct KeyboardInterrupt handling 
    538         signal.signal(signal.SIGINT, signal.SIG_DFL) 
     572        #signal.signal(signal.SIGINT, signal.SIG_DFL) 
     573        signal.signal(signal.SIGINT, exitHandler) 
    539574         
    540575        #log = puzzlebox_logger.puzzlebox_logger(logfile='server_thinkgear') 
Note: See TracChangeset for help on using the changeset viewer.