gpt4 book ai didi

multithreading - 在Qt中等待几秒钟

转载 作者:行者123 更新时间:2023-12-03 12:49:14 25 4
gpt4 key购买 nike

我对 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
}

问题是在 initialize() 方法中等待 15 秒而不阻塞串行输入。我试过了

QThread::sleep(15)

甚至

QTime time;
time.start();
while(time.elapsed() < 15000); // evil busy wait

但是两次尝试后,我都停止获取串行数据(在那 15 秒内不再调用 onDataAvailable)。正确的做法是什么?

最佳答案

这种方法怎么样:

void SerialIO::initialize()
{
// do something

// wait for 15 s
QTimer::singleShot(15000, this, SLOT(onTimer()));
}

void SerialIO::onDataAvailable()
{
// do something useful
}

void SerialIO::onTimer()
{
// do something else
}

它不会阻止事件,您将调用 onDataAvailable() 插槽。

关于multithreading - 在Qt中等待几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20523564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com