在串行通信中,我正在使用twisted的reactor = win32eventreactor.Win32Reactor()。 用于使用串口传输。
reactor正在另一个线程中运行(它是在反应堆的帮助下运行的串行通信线程)
在调用reactor.run()之前,我正在创建这样的SerialPort:
try:
SerialPort(protocol(self.reactor, self),
self.cfg.comport,
self.reactor,
baudrate=self.cfg.baudrate,
bytesize=bytesize,
parity=parity,
stopbits=STOPBITS_ONE,
xonxoff=0,
rtscts=0)
self.connected = True
except serial.SerialException, ex:
self.log.error('Serial exception: {0}'.format(ex))
self.connected = False
except ValueError, ex:
self.log.error('Serial exception: {0}'.format(ex))
self.connected = False
finally:
self.comm_event.set()
关于创建发生错误。例如: 串行异常:无法打开端口'COM9':WindowsError(2,'系统找不到指定的文件。')
这没关系,应该是一个错误。有了这个错误,协议实例将没有传输(如果成功 - 它将有)。
在此之后,我正在调用reactor.run()。它也没问题,因为主线程将管理通信线程,并在出现错误(前面提到)时调用reactor.stop()。 但如果在调用reactor.run()之前发生此错误,则在此调用reactor.stop()(从MainThread调用)后不会停止反应器主循环。如果在调用reactor.run()之前发生NO错误,则reactor.stop()调用过程STOPS反应器。
如果传输创建出错,看起来像reactor忽略了这个reactor.stop()。
所以也许有人知道为什么?或者可能如何调试reactor.stop()程序来找出为什么reactor没有停止?