首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Qt测试框架中对信号进行基准测试?

如何在Qt测试框架中对信号进行基准测试?
EN

Stack Overflow用户
提问于 2018-08-08 19:12:53
回答 1查看 176关注 0票数 0

我在Qt C++中实现了连接扫描算法,并使用Qt测试框架在项目中添加了一些测试,这很好。我查看了Qt测试框架的文档,但我找不到一种方法来对一个称为异步方法的方法进行基准测试,并等待它的信号。

您可以使用QSignalSpy测试信号,但它需要等待一段时间才能检查信号是否已触发。QBENCHMARK可以测量执行一段代码的时间。我想测量异步方法的调用和该方法所调用的线程触发的信号之间的时间。

代码语言:javascript
复制
QString str1 = "foo";
QString str2 = "foo";

QBENCHMARK {
    str1.localeAwareCompare(str2);
}

上面的代码适用于同步操作,但不适用于带信号的异步操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 22:16:06

Qt在他们的测试框架中没有任何东西来实现这一点。但是,在QEventLoop的帮助下,您可以等待信号触发(这会使您的代码再次同步)。

如果在事件循环周围应用QBENCHMARK宏,则可以对异步方法进行基准测试。这样做有一个缺点:创建一个QEventLoop并将信号连接到事件循环的quit()方法仍然有一些开销。

代码语言:javascript
复制
QBENCHMARK_ONCE {
    planner->getConnections(
                QUrl("http://irail.be/stations/NMBS/008811189"), // From: Vilvoorde
                QUrl("http://irail.be/stations/NMBS/008891009"), // To: Brugge
                QDateTime::fromString("2018-08-02T13:00:00.000Z", Qt::ISODate), // Departure time (UTC)
                4 // Max transfers
                );

    QEventLoop loop;
    connect(planner, SIGNAL(routesFound(QList<CSA::Route*>)), &loop, SLOT(quit()));
    loop.exec();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51745261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档