在python中生成包含套接字连接的QThread

2024-10-02 02:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试实现一个包含套接字连接的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'

我不熟悉套接字和线程,所以我可能在某个地方犯了一个非常愚蠢的错误。在


Tags: 数据函数self应用程序信号socket线程thread

热门问题