在我的应用程序中,我需要使用4个线程。有一个GUI线程(仅处理GUI相关的东西),第二个线程(传感器线程)负责从网络套接字接收和过滤一些传感器数据,第三个线程(控制线程)和第四个线程(AI线程)处理一些繁重的工作。为了在它们之间进行通信,我正在使用信号和插槽。
第二个线程完成对最后一个接收到的数据的过滤后,它会向其他3个线程发出一个带有数据的信号。
我的问题是,Sensor线程发出信号要花费5毫秒以上的时间(时序对于该应用程序至关重要)。但是,如果未连接AI和控制线程,则不会发生这种情况。
我已经在使用QueuedConnection(默认)并将数据作为const指针传递。数据是我正在使用的一个类的对象,其大小约为1.2Kb(使用sizeof(ClassData)获得)
插槽不进行大量计算,只是更新当前线程中的数据。
发出数据的代码如下:
void filterData()
{
filteredData = filter(networkData); // Filters the network data
// Emits a signal with the filtered data
QElapsedTimer measureTime; measureTime.start();
emit sendFilteredData(filteredData);
qDebug() << measureTime.nsecsElapsed()/1e6; // Shows measured time in ms
}