我对 Qt 中的线程的了解相当有限,现在我遇到了一个似乎与线程有关的问题。我正在使用 QextSerialPort 通过 uart 进行通信。我的串行通信类看起来像这样(剥离到最低限度):
SerialIO::SerialIO() {
port = new QextSerialPort("/dev/ttymxc1");
connect(port, SIGNAL(readyRead()), this, SLOT(onDataAvailable()));
port->setQueryMode(QextSerialPort::EventDriven);
port->open(QIODevice::ReadWrite | QIODevice::Unbuffered);
port->setBaudRate(BAUD115200);
port->setFlowControl(FLOW_OFF);
port->setParity(PAR_NONE);
port->setDataBits(DATA_8);
port->setStopBits(STOP_1);
}
void SerialIO::initialize() {
// do something
// wait for 15 s
// do something else
}
void SerialIO::onDataAvailable() {
// do something useful
}
问题是在方法中等待 15 秒initialize()
而不阻塞串行输入。我试过了
QThread::sleep(15)
乃至
QTime time;
time.start();
while(time.elapsed() < 15000); // evil busy wait
但是通过这两次尝试,我停止获取串行数据(onDataAvailable
在这 15 秒内不再调用)。这样做的正确方法是什么?