作者uranusjr (←这人是超级笨蛋)
看板Python
标题Re: [问题] kill socket thread
时间Tue Nov 22 16:47:35 2011
※ 引述《b60413 (None)》之铭言:
: 目前使用Python+Qt在撰写一个Socket
: 目前想要在Thread中中止一个的Socket(blocking)
: 原以为只要中止Thread後,Socket就会自动结束
: 但後来发现Thread中止後,Socket能然会继续等待连线
: 不知道有什麽样的发法可以中止Socket?
: 谢谢
: (下面附上部分Socket程式码)
: P.S Thread是使用Qt的QThread,Socket是使用python
QThread 结束的时候会发出一个 finished() signal
把它接到一个 method, 然後在里面关掉 socket 就行了
接着你前面的程式来写, 就可以写成这样...
: def __init__(self,port):
: QThread.__init__(self)
: self.__port=port
: self.__socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
: self.__socket.bind(('',self.__port))
: self.__socket.listen(1)
self.finished.connect(self.close)
: def run(self):
: while True:
: try:
: (conn,addr)=self.__socket.accept() #Wait Connect
: except (socket.timeout,socket.error):
: pass
: else:
: data=conn.recv(1024) #Receive Data
: print "%s send %s\n" % (addr[0],data)
: conn.send("Server Echo %s" % (data)) #Send Data
def close(self):
# 在这里把 socket 结束掉
pass
说到 QThread, 前阵子在 C/C++ 板有一些讨论
有篇文章写得很好, 不过我一时找不到, 等我去爬一下之前的文章再补网址
里面解释 QThread 的特性和陷阱解释得很详尽
另外如果你不是非得用 blocking socket 不可
那麽 QSocketNotifier 会是比较好的选择
--
Les grandes et les meilleurs
tone from "Zadok the Priest"
Eine grosse stattliche Veranstaltung
by F. Handel
THE MAIN EVENT! These are the men
Sie sind die Besten
"Champions League" by Tony Britten THESE ARE THE CHAMPIONS!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.81.146
3F:推 b60413:感谢分享! 11/23 09:14