multithreading - 在Qt中等待几秒钟

标签 multithreading qt qextserialport

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

相关文章:

multithreading - 如何从 Perl 脚本中启动批处理文件并从中分离

多线程应用程序中的 C# TraceSource 类

c++ - Qt - 为什么将 '&' 添加到字符串中?

qt - QML - 移动到可轻弹的顶部底部

c++ - qt - 在父窗口/小部件类中初始化子小部件的目的是什么?

c++ - Qt调试报错: "while parsing target library list: not well-formed (invalid token)"

c# - Monotouch 中的 System.ComponentModel.BackgroundWorker - 正确用法?

C# WaitAny 和错过的事件

linux - 如何使用Qextserialport在串口上写