我试图在一个不同的线程分配的“自给式”沟通对象,以防止它的GUI处理延迟隔离。
所以,在“AppCore”对象创建创建一个“CommCore”无父:
cAppCore::cAppCore(QObject *parent) : QObject(parent)
{
....
CommCore = new cCommCore;
(here I do signal-slot connections between CommCore and AppCore)
....
}
而在CommCore构造我做到以下几点:
cCommCore::cCommCore(QObject *parent) : QObject(parent)
{
CommThread = new QThread(this);
CommSerial = new QSerialPort(this);
CommTimer = new QTimer(this);
connect(CommSerial,&QSerialPort::readyRead,this,&cCommCore::ProcessRXByte);
connect(CommSerial, static_cast<void (QSerialPort::*)(QSerialPort::SerialPortError)>(&QSerialPort::error), this, &cCommCore::HandleSerialError);
connect(CommTimer, &QTimer::timeout, this,&cCommCore::TimerTimeout);
CommTimer->start(OFFLINE_POLL_TIME);
this->moveToThread(CommThread);
CommThread->start(QThread::HighPriority);
}
现在我的问题:
1 - 这是确定以使线程处理对象的移动对象的孩子? 因为它是在GUI线程创建的(这里的构造函数被调用),然后转移到由自己处理线程(考虑到如果我需要的任何控制,我会从CommCore对象的内部处理它)
2 - 这是确定开始在构造函数中的计时器(这是在计时器构造方法相同的线程,GUI线程),并移至一切新的线程后,对不对?
3-如果我想以后启动定时器,唯一的办法是直通信号槽? 其中在GUI线程发出的并连接到一个CommCore槽(其随后将被排队和执行。CommCore线程)的信号
4-考虑到我的我的CommCore对象和AppCore(GUI线程)之间的所有交互都通信号时隙(这是线程安全),它是概念性地正确作出? (对象的想法本身和它的孩子们转移到一个新的线程,等等)
基于在池(由计时器计时)5-我的串行通信例程将从GUI处理延迟被屏蔽? (我的意思是,将有在由串行和定时器对象发生的事件的产生和处理没有延迟?)