Qt QTcpSocket waitForReadyRead在从不同的线程关闭套接字时崩溃

时间:2013-01-29 13:58:28

标签: qt

  • 我在一个单独的线程(pthread)中调用QTcpSocket的waitForReadyRead方法,
  • 现在,如果socket从主线程关闭,则应用程序在waitForReadyRead方法中崩溃。

我正在使用waitForReadyRead,超时= -1。

我也不能在我的实现中使用qt信号槽机制

有人可以解释一下上面的实施中出了什么问题

1 个答案:

答案 0 :(得分:0)

来自Qt documentation of QTcpThread

  

注意:此类中的所有函数都是可重入的。

这意味着从多个线程调用一个对象是不安全的(有关更多信息,请阅读this)。即使您以某种方式使代码工作,它也可能在较旧版本或较新版本中崩溃。

如果你真的不能使用信号/插槽,那么你可以在想要关闭连接时设置一个标志,并在一个超时循环中调用waitForReadyRead。然后,您可以轮询该标志并使用waitForReadyRead-thread关闭套接字(如果已设置)。