QT开发中文网

Qt 多线程,任务500ms内没返回值,就返回默认值,代码编写

以下是一个使用Qt多线程的示例代码,如果任务在500ms内没有返回值,将会返回默认值。

#include <QCoreApplication>
#include <QThread>
#include <QDebug>

// 自定义任务类
class MyTask : public QObject
{
    Q_OBJECT

public:
    explicit MyTask(QObject *parent = nullptr) : QObject(parent) {}

public slots:
    void doTask()
    {
        // 模拟耗时任务
        QThread::msleep(1000);

        // 如果任务在500ms内没有返回结果,则发送默认值
        if (!m_resultReady)
        {
            emit resultReady("Default Value");
        }
    }

signals:
    void resultReady(const QString &result);

public:
    bool m_resultReady = false;
};

// 主线程类
class MainThread : public QObject
{
    Q_OBJECT

public:
    explicit MainThread(QObject *parent = nullptr) : QObject(parent) {}

public slots:
    void startTask()
    {
        qDebug() << "Main Thread: Starting task";

        // 创建子线程并启动任务
        QThread* thread = new QThread;
        MyTask* task = new MyTask;
        
        task->moveToThread(thread);
        
        connect(thread, &QThread::started, task, &MyTask::doTask);
        
        // 在500ms后检查是否有结果返回,若无则发出默认值
        QTimer::singleShot(500, this, [=]() {
            if (!task->m_resultReady)
            {
                qDebug() << "Main Thread: Task timeout. Returning default value";
                emit task->resultReady("Default Value");
                thread->quit();
            }
         });

         connect(task, &MyTask::resultReady, this, [&](const QString &result) {
            qDebug() << "Main Thread: Task result:" << result;
            thread->quit();
         });

         connect(thread, &QThread::finished, task, &MyTask::deleteLater);
         connect(thread, &QThread::finished, thread, &QThread::deleteLater);

         thread->start();
    }
signals:
    void taskResult(const QString& result);
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    MainThread mainThread;
    QObject::connect(&mainThread, &MainThread::taskResult,
                     [&](const QString& result){
                        qDebug() << "Main Thread: Task result received in main thread:" << result;
                        // 在这里处理任务结果
                     });

    // 启动任务
    mainThread.startTask();

    return a.exec();
}

#include "main.moc"

这是一个简单的例子,主线程中创建了一个子线程,并在子线程中执行耗时任务。通过QTimer定时器,在500ms后检查任务是否已经返回结果,若没有,则发送默认值。主线程可以通过信号槽连接来接收任务的结果。

请注意,这段代码仅为示例,实际使用时需要根据具体需求进行适当修改和完善。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=9242

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?