2

我正在尝试创建一个线程来侦听来自 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"永远不会执行。有人可以解释我错过了什么吗?我已经被困了一段时间了。

非常感谢你。

4

1 回答 1

7

我无法为您测试,但请仔细考虑这一行:

readMsgThread = threading.Thread( target=readMsg(serialPort) )

在执行分配时调用 readMsg(serialPort),并将结果作为target. 我猜你几乎肯定想做:

readMsgThread = threading.Thread( target=readMsg, args=(serialPort,) )

反而。

再澄清一点,因为您在该行上调用 readMsg,所以在返回之前不会执行更多行readMsg。但该函数永远不会返回。这就是为什么从未见过“发送一些数据”的原因。事实上,你永远不会到达

readMsgThread.setDaemon( True )

声明要么。

于 2013-10-05T20:42:18.420 回答