我目前正在尝试实现一个包含套接字连接的QThread。套接字连接重复运行(1:)检查是否接收到新数据。一旦接收到这些数据,它就应该发出一个信号,调用一个函数,并将接收到的数据提供给它。在
我把插座连接好了。当我单独运行函数时,它会等待数据,并在新数据到来时打印。但是,我还是把它放在自己的应用程序中,因为我可以继续用它的图形用户界面来构建它。在
所以为了线程化,我实现了一个GenericThread类,它接受任何函数并在线程中运行它。我的主窗口类连接套接字信号,实例化一个GenericThread,然后启动它。但这会导致我的应用程序挂起。以下是相关代码:
插座连接
def remoteConn(self, HOST='my.server', PORT=25562):
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
newLinesRaw = ''
while 1:
newData = s.recv(1024)
if newData:
print '<rawData>\n', newData, '\n</newData>\n'
newLinesRaw += newData
else:
if newLinesRaw:
newLines = newLinesRaw.split('\n')
print '\nNew Lines:\n', newLines
self.emit(QtCore.SIGNAL('newRemoteLines'), newLines)
newLinesRaw=''
else:
time.sleep(.1)
s.close()
通用线程类
^{pr2}$生成远程线程。请注意,这两个print语句都被执行。
print 'spawning remote thread'
self.connect(self, QtCore.SIGNAL('newRemoteLines'), self.routeServerLines)
thread = GenericThread(self.remoteConn)
thread.start()
print 'thread started'
我不熟悉套接字和线程,所以我可能在某个地方犯了一个非常愚蠢的错误。在
如果没有进一步的引用,线程可能会被销毁。在
尝试使用
self.thread
而不是仅仅使用thread
。在相关问题 更多 >
编程相关推荐