提问人:willy_j 提问时间:6/9/2023 更新时间:6/9/2023 访问量:41
Qt鼠标悬停在GUI上导致QThread循环冻结
Qt mouse hover over GUI causes QThread loop to freeze
问:
我是新手,遇到了一些问题。 我在一个QThread中读取流量,在另一个QThread中进行计算,并在GUI的QTableWidget中输出数据。当我什么都不做时,它运行良好,但是当我将鼠标悬停在 GUI 上时,阅读器线程开始冻结并失去流量。 如何避免冻结以及为什么 GUI 会影响其他线程?
阅读器读取方法:
void FrameReader::read()
{
int res = pcap_next_ex(m_adhandle, &m_currentFrame->header, &m_currentFrame->pkt_data);
if (res > 0)
{
frame_dst = readMAC(m_currentFrame->pkt_data, 0x0, 6).value<MAC>();
if (frame_dst.m1 != 0x01 && frame_dst.m2 != 0x0c && frame_dst.m3 != 0xcd) qDebug() << "Wrong frame data";
bool filter = (m_dst != nullptr) ? ((frame_dst == *m_dst) ? true : false) : true;
if (filter)
{
emit frameReceived(m_currentFrame);
}
}
else if (res == -1)
{
qDebug() << "Frame read error";
}
if (isOn) QMetaObject::invokeMethod(this, "read", Qt::QueuedConnection);
}
它发出 frameReceived 信号,该信号通过 QueuedConnection 连接到计算线程中所有必要的计算类方法。
计算后,计算类发出 valuesIsReady 信号,该信号通过 QueuedConnection 连接到 GUI 小部件,该小部件仅从计算类中的变量中获取数据即可输出计算数据。
读取器和计算类具有包装工作类,这些工作类通过 moveToThread() 在各自的 QThreads 中传输。
它可以在不移动鼠标的情况下工作,但是当我将鼠标悬停在 GUI 上时,会发生一些麻烦。
答: 暂无答案
评论