在QApplication的析构函数中使用QT事件-挂起

时间:2019-05-28 15:22:00

标签: c++ qt

我正在使用QT GUI应用程序,该应用程序在QApplicaton析构函数期间无法处理事件。我使用(无法更改)的库使用QEventLoop。它已将一些数据写入套接字,并且似乎正在等待响应。调试器显示QEventDispatcherWin32 :: processEvents正在循环并耗尽CPU。

我已经设法通过删除一些特定的小部件使其开始工作。但是,这似乎有点随机!

小部件销毁时,我们正在注销服务器。根据创建的窗口小部件,我有时会挂起,有时却不会。

这是挂起的exec呼叫-

  m_timedout = false;
  QEventLoop loop;
  QTimer timer;
  timer.setSingleShot(true);
  connect(&timer, SIGNAL(timeout()), this, SLOT(slt_timeout()));
  connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
  timer.start(1800000);
  connect(this, SIGNAL(sig_response(int, int, QByteArray)), &timer, SLOT(stop()));
  connect(this, SIGNAL(sig_response(int, int, QByteArray)), &loop, SLOT(quit()));
  loop.exec(QEventLoop::ExcludeUserInputEvents);

那我在问什么?我对QT还是很陌生,不了解所有概念,但令我感到担忧的是,我们在应用程序的析构过程中依赖QT事件处理。那是一件有效的事情吗? QT会开始逐渐消失吗?

还有其他原因导致挂起吗?

0 个答案:

没有答案