如何在主线程执行某些操作时让一个线程侦听数据

时间:2013-10-05 20:25:20

标签: python multithreading

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

非常感谢你。

1 个答案:

答案 0 :(得分:7)

我不能为你测试这个,但要仔细考虑这一行:

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

在分配完成时调用 readMsg(serialPort),并将结果作为target传递。我猜你几乎肯定想做:

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

代替。

为了澄清一点,因为您在该行上调用 readMsg,在readMsg返回之前不会再执行任何行。但是这个功能永远不会回来这就是从未见过“发送一些数据”的原因。事实上,你永远不会到达

readMsgThread.setDaemon( True )

声明。