C++ 如何在readyRead信号上从套接字抓取数据?
我正在编写一个从套接字接收数据的Qt/C++程序。我发现我丢失了readyRead信号,因为我的插槽花了太长时间来分析传入的数据。现在我把它配对到最小值:C++ 如何在readyRead信号上从套接字抓取数据?,c++,qt,signals-slots,slot,event-loop,C++,Qt,Signals Slots,Slot,Event Loop,我正在编写一个从套接字接收数据的Qt/C++程序。我发现我丢失了readyRead信号,因为我的插槽花了太长时间来分析传入的数据。现在我把它配对到最小值: void test::inputAvailable() { while (m_tcpSocket->bytesAvailable()) m_inputBuffer += m_tcpSocket->readAll(); emit(datawaiting()); } 我的问题是: 我需要用互斥锁保护m
void test::inputAvailable()
{
while (m_tcpSocket->bytesAvailable())
m_inputBuffer += m_tcpSocket->readAll();
emit(datawaiting());
}
我的问题是:
为什么要共享全局变量、引入同步等,而只需读入变量并将其传递给处理程序
void test::inputAvailable()
{
while (m_tcpSocket->bytesAvailable())
QByteArray data += m_tcpSocket->readAll();
emit datawaiting(data);
}
您使用显式多线程吗?因为否则就不需要同步了。信号是正常的函数调用,不会导致事件被处理。我不使用与我所询问的变量/方法相关的线程(我在程序中有另一个不相关的线程)。我想这就是让我困惑的地方。如果在我的程序处理某个特定变量时收到一个信号,而插槽也在处理该变量,那么事件循环如何知道该做什么?它是让方法先完成,还是中断以运行slot方法?它什么时候运行slot方法?事件循环不执行任何多线程处理。如果您的代码被执行,信号将不会被传递,直到您的代码完成并且控件返回到事件循环。。。这里也没有全局变量。