gpt4 book ai didi

c++ - 如何最好地从 readyRead 信号的套接字中获取数据?

转载 作者:太空宇宙 更新时间:2023-11-04 14:32:12 26 4
gpt4 key购买 nike

我正在编写一个从套接字接收数据的 Qt/C++ 程序。我发现我丢失了 readyRead 信号,因为我的插槽分析传入数据的时间太长了。所以现在我已经将它配对到最低限度:

void test::inputAvailable()
{
while (m_tcpSocket->bytesAvailable())
m_inputBuffer += m_tcpSocket->readAll();
emit(datawaiting());
}

我的问题是:

  1. 我需要用互斥体保护 m_inputBuffer 变量吗?由于这个插槽将附加到它,而我的主程序可能正在从中删除数据。
  2. 互斥量是否会减慢我的插槽速度,因为我需要它很快。 (避免丢失 readyRead 信号)
  3. emit(最后一行)是否是向我的程序发出信号以分析传入数据的正确方式?或者这是否会导致我的程序在仍在插槽中时重新进入事件循环(导致信号丢失)

我读过 this similar question但没有人给出真正的答案。

最佳答案

  1. 由于它同时发生,因此某种变量访问同步会很有用。否则它可能会产生未定义的行为。
  2. 这取决于主程序占用同步变量的时间。
  3. Qt 信号和槽被放置在事件循环队列中,因此发出 datawaiting() n 次,您最终会得到与该特定信号配对的 n 次执行槽。

关于c++ - 如何最好地从 readyRead 信号的套接字中获取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19890553/

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