Qt无限循环在另一个线程

塔哥

我正在尝试在另一个线程中设置无限循环。目的是从URL下载一些数据,将数据发送到主线程并休眠几秒钟:

DataFetcher::DataFetcher(QUrl url, int fetchRateSec) :
    url {url},
    fetchRateSec {fetchRateSec}
{

}

void DataFetcher::run()
{
    QNetworkAccessManager* manager = new QNetworkAccessManager();
    QObject::connect(manager, &QNetworkAccessManager::finished, this, &DataFetcher::onReply);

    while (true) {
        QNetworkRequest req;
        req.setUrl(url);
        manager->get(req);
        qDebug() << "run";
        sleep(fetchRateSec);
    }
}


void DataFetcher::onReply(QNetworkReply* reply)
{
    qDebug() << "repl";
    emit fetched(reply->readAll());
}

class DataFetcher : public QThread
{
    Q_OBJECT
public:
    DataFetcher(QUrl, int);
    void run() override;
signals:
    void fetched(QString);
private:
    const QUrl url;
    const int fetchRateSec;   
private slots:
    void onReply(QNetworkReply*);
};

但是onReply从来没有叫过。

有趣的qDebug是,while循环中in会按原样执行。

我对QT有点不满意,所以我可能错过了一些有关如何连接插槽/信号的信息,但是我认为我在遵循其他一些示例后还是正确的。

如何编写Qt HTTP GET请求中的已接受答案中可以看出来。

这可能是什么问题?

Bnaecker

根据评论中的讨论,似乎不需要整个线程。

Qt最强的特性之一是它是事件驱动的。通常,您通过描述想要响应某些事件(信号发生的事情(插槽来创建程序在基于Qt的应用程序中(通常仅用于测试),明确地等待或休眠是非常少见的,并且在事件驱动的开发中通常认为不可以。

对于您的特定问题,解决方案可能如下所示。您可以QTimer在主线程中创建一个并将其超时信号连接到一个函数以发出HTTP请求。然后,您可以将插槽连接到QNetworkAccessManager::finishedsignal,当您的响应完成时该插槽将运行。所有这些都可以在主线程中进行,这取决于线程的事件循环来管理回调。无需自己管理单独的线程,也无需循环,休眠,阻塞或类似操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

另一个无限的$ digest循环

来自分类Dev

与另一个线程中的循环通信

来自分类Dev

如果另一个线程进入该线程,则退出循环

来自分类Dev

从另一个View Controller停止dispatch_async内部的无限while循环

来自分类Dev

如何从一个线程循环arraylist,同时从另一个线程将其添加到它?

来自分类Dev

R for 循环在另一个

来自分类Dev

Qt中的slot函数是否在另一个线程上运行?

来自分类Dev

我如何在另一个线程Qt中显示MessageBox

来自分类Dev

Python Qt - 如何从另一个线程在表小部件中插入项目?

来自分类Dev

如何从另一个线程关闭对话框?Qt

来自分类Dev

访问另一个正在运行循环的线程的结果

来自分类Dev

Qt5-QML:在嵌套循环中时,ColumnLayout覆盖另一个ColumnLayout

来自分类Dev

leveldb线程安全:读入一个线程,遍历另一个线程

来自分类Dev

Python多线程使用另一个线程中的一个线程的数据

来自分类Dev

从另一个函数的“if 循环”内部调用/移动一个函数 - Qt、C++

来自分类Dev

android:从另一个类中的另一个线程更新UI

来自分类Dev

无法脱离For循环到另一个For循环

来自分类Dev

另一个循环后循环变量

来自分类Dev

setTimeout循环等待另一个setTimeout循环

来自分类Dev

在另一个for循环VHDL中进行for循环

来自分类Dev

使用另一个 for 循环缩短 for 循环

来自分类Dev

另一个 for 循环 Javascript 中的 for 循环问题

来自分类Dev

来自一个线程的值影响另一个线程的路径

来自分类Dev

从C ++ 11中的另一个线程解锁一个线程

来自分类Dev

同步对象可锁定一个线程并释放另一个线程

来自分类Dev

如何冻结一个线程并从另一个线程通知它?

来自分类Dev

如何阻止一个线程修改另一个线程正在使用的数组?

来自分类Dev

前一个线程完成后启动另一个线程

来自分类Dev

一个线程可以中断另一个线程吗?

Related 相关文章

  1. 1

    另一个无限的$ digest循环

  2. 2

    与另一个线程中的循环通信

  3. 3

    如果另一个线程进入该线程,则退出循环

  4. 4

    从另一个View Controller停止dispatch_async内部的无限while循环

  5. 5

    如何从一个线程循环arraylist,同时从另一个线程将其添加到它?

  6. 6

    R for 循环在另一个

  7. 7

    Qt中的slot函数是否在另一个线程上运行?

  8. 8

    我如何在另一个线程Qt中显示MessageBox

  9. 9

    Python Qt - 如何从另一个线程在表小部件中插入项目?

  10. 10

    如何从另一个线程关闭对话框?Qt

  11. 11

    访问另一个正在运行循环的线程的结果

  12. 12

    Qt5-QML:在嵌套循环中时,ColumnLayout覆盖另一个ColumnLayout

  13. 13

    leveldb线程安全:读入一个线程,遍历另一个线程

  14. 14

    Python多线程使用另一个线程中的一个线程的数据

  15. 15

    从另一个函数的“if 循环”内部调用/移动一个函数 - Qt、C++

  16. 16

    android:从另一个类中的另一个线程更新UI

  17. 17

    无法脱离For循环到另一个For循环

  18. 18

    另一个循环后循环变量

  19. 19

    setTimeout循环等待另一个setTimeout循环

  20. 20

    在另一个for循环VHDL中进行for循环

  21. 21

    使用另一个 for 循环缩短 for 循环

  22. 22

    另一个 for 循环 Javascript 中的 for 循环问题

  23. 23

    来自一个线程的值影响另一个线程的路径

  24. 24

    从C ++ 11中的另一个线程解锁一个线程

  25. 25

    同步对象可锁定一个线程并释放另一个线程

  26. 26

    如何冻结一个线程并从另一个线程通知它?

  27. 27

    如何阻止一个线程修改另一个线程正在使用的数组?

  28. 28

    前一个线程完成后启动另一个线程

  29. 29

    一个线程可以中断另一个线程吗?

热门标签

归档