首页 > 解决方案 > 在QApplication的析构函数中使用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不是已经开始降温了吗?

还有什么会导致挂起的吗?

标签: c++qt

解决方案


推荐阅读