如何在Qt测试框架中对信号进行基准测试?
How can I benchmark signals in the Qt test framework?
我正在Qt C++中实现连接扫描算法,并使用Qt测试框架向项目添加了一些测试,这很好。我查看了Qt测试框架的文档,但我找不到一种方法来对所谓的异步方法进行基准测试并等待它的信号。
你有QSignalSpy可以测试信号,但它会等待一段时间,然后再检查信号是否已触发。QBENCHMARK可以测量执行一段代码的时间。我想测量异步方法的调用与该方法调用的线程触发的信号之间的时间。
QString str1 = "foo";
QString str2 = "foo";
QBENCHMARK {
str1.localeAwareCompare(str2);
}
上面的代码适用于同步操作,但不适用于带有信号的异步操作。
Qt在他们的测试框架中没有任何东西来完成这一点。 但是,在QEventLoop的帮助下,您可以等待信号触发(这使您的代码再次同步(。
如果在事件循环周围应用 QBENCHMARK 宏,则可以对异步方法进行基准测试。这样做有一个缺点:创建 QEventLoop 并将信号连接到事件循环的 quit(( 方法仍然有一些开销。
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();
}
相关文章:
- 使用rdtsc进行基准测试的缺点是什么
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 更高效地在微控制器上对C++进行基准测试
- _mm256_load_ps调试模式下导致谷歌/基准测试的分段错误
- 二叉树基准测试结果
- 如何使用谷歌基准测试对自定义界面进行基准测试
- 谷歌基准测试,如何只调用一次代码?
- 使用 std::chrono::steady_clock 对线程/异步中的代码进行基准测试
- 谷歌基准测试结果中显示的时间没有意义
- 使用 Google 基准测试时返回值会发生什么情况?
- 如何在Qt测试框架中对信号进行基准测试?
- C/C++memcpu基准测试:测量CPU和墙时间
- 如何将参数传递给Google基准测试程序
- 如何对CUDA项目进行基准测试
- 为什么这个简单的 C++ SIMD 基准测试在使用 SIMD 指令时运行速度较慢?
- 多部分基准测试的权重是多少?
- 简单的 for() 循环基准测试在任何循环绑定下花费相同的时间
- 禁用优化后,quick-bench.com 基准测试要快得多
- Winsock本地客户服务器基准测试
- webAssembly有标准的基准测试吗?