gpt4 book ai didi

c++ - 具有高频信号 <-> 槽连接的 Qt EventLoop 延迟

转载 作者:行者123 更新时间:2023-11-30 04:56:10 24 4
gpt4 key购买 nike

我真的为此而疯狂,我希望有人能给出答案......我确实遇到了 QUdpSockets 的奇怪问题以及信号和槽连接。我在 3 个不同的 UdpSockets 接收小数据包(64 字节) 100Hz,之后没有任何处理。 Signal<-> Slot Connection 用于读取数据接缝以在不同的笔记本电脑上完全正常工作,但在它最终应该运行的 pc 上却不行,它的处理能力比笔记本电脑强得多。

我在具有相同设置的每台机器上运行相同的代码。问题是,recvEvents以某种方式在 PC 上排队并延迟了几秒钟,但在笔记本电脑上却没有。起初我以为这是网络问题,但我已经尝试了不同的网卡/交换机等……以及其他一些事情。唯一有帮助的是将接收代码从信号 <-> 插槽更改为另一个线程 std::thread ,所以它肯定与来自 readyRead 的连接有关signal.Some 代码:


connect(&udpSocket, &QUdpSocket::readyRead, this, &DataController::handleData);// Called with 100Hz
void handleData(){ //This function call is beeing delayed/queued....
udpSocket.readDatagram(&data,datasize);
}

我的问题:

  1. 是否有可以处理的事件/秒数限制?
  2. 你有什么建议我可以在哪里查找错误或者如何查找错误加快 QEventLoop

我正在运行:Win10专业版,VS 2017 64位,Qt 5.11.2

BR麦克

最佳答案

显然,对于较慢的计算机,您总是只有一个数据报等待读取。使用更快的计算机,当您进入插槽阅读时,您可能已经收到了不止一个。当您收到 readyRead 信号时,您应该始终读取所有待处理的数据报。您可以使用 QUdpSocket::hasPendingDatagrams为此。

void handleData(){
while (udpSocket.hasPendingDatagrams()) {
// clear data buffer
udpSocket.readDatagram(&data,datasize);
// process received datagram before reading next...
}
}

关于c++ - 具有高频信号 <-> 槽连接的 Qt EventLoop 延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52721377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com