"자체 포함"통신 객체를 다른 스레드에 할당하여 GUI 처리 지연으로부터 격리 된 상태로 유지하려고합니다.QT QTimer와 QSerial을 사용하는 QThread - parenting
cAppCore::cAppCore(QObject *parent) : QObject(parent)
{
....
CommCore = new cCommCore;
(here I do signal-slot connections between CommCore and AppCore)
....
}
을하고 CommCore 생성자에서 나는 다음을 수행하십시오 :
그래서,에 "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 처리 지연으로부터 보호 될 것인가? (직렬 및 타이머 객체에 의해 생성 된 이벤트의 생성 및 처리에 지연이 없습니다.)
감사합니다!
맞아요, 고맙습니다. 그래서 invokeMethod를 사용하면 "movetothread"뒤에 생성자 안에 타이머의 시작 메소드를 호출 할 수 있습니다! 이것은 대상 객체의 스레드에서 메서드 호출을 "대기"합니다 (신호 슬롯 상호 작용과 비슷 함)? 좋은! 감사합니다! –