我正在尝试创建一个线程来监听来自COM串口的传入数据,而主线程正在进行一些操作。
这是我的代码(为简洁起见省略了一些代码):
def readMsg( serial ):
msgArray = []
while ( True ):
char = "0x" + serial.read().encode('hex')
if char == '0xfd':
msgArray = []
msgArray.append(char)
elif char == '0xfc':
msgArray.append(char)
print debugPrefix, "ComPort:", (serial.port + 1), msgArray
elif char == '0x':
pass
else:
msgArray.append(char)
# Find available ports
initializeComPorts()
# Print port infos
printComPorts()
# Opens serial and returns opened serial
serialPort = openPort(1);
print "thread started"
readMsgThread = threading.Thread( target=readMsg(serialPort) )
readMsgThread.setDaemon( True )
readMsgThread.start()
print "sending some data"
serialPort.send('h')
当我执行代码时readMsgThread
听得很好,但行print "sending some data"
永远不会被执行。有人可以解释一下我错过了什么吗?我已经坚持了一段时间。
非常感谢你。
答案 0 :(得分:7)
我不能为你测试这个,但要仔细考虑这一行:
readMsgThread = threading.Thread( target=readMsg(serialPort) )
在分配完成时调用 readMsg(serialPort)
,并将结果作为target
传递。我猜你几乎肯定想做:
readMsgThread = threading.Thread( target=readMsg, args=(serialPort,) )
代替。
为了澄清一点,因为您在该行上调用 readMsg
,在readMsg
返回之前不会再执行任何行。但是这个功能永远不会回来这就是从未见过“发送一些数据”的原因。事实上,你永远不会到达
readMsgThread.setDaemon( True )
声明。