QTEST_MAIN 不使用提供的 Testclass
Posted
技术标签:
【中文标题】QTEST_MAIN 不使用提供的 Testclass【英文标题】:QTEST_MAIN doesn't use provided Testclass 【发布时间】:2016-04-08 11:33:53 【问题描述】:我想对线程及其交互(例如共享数据)进行性能测试。为了实现这一点,我尝试了 Qt 提供的 Tutorial for Benchmarks,这导致我编写了以下代码。
基准级:
class Bm : public QObject
Q_OBJECT
private slots:
void Benchmark_1()
bm_1 bm;
QBENCHMARK
pool.start(&bm); //pool is a QThreadpool
pool.start(&bm);
pool.waitForDone();
void Benchmark_2()
bm_1 b_1; bm_2 b_2;
QBENCHMARK
pool.start(&b_1);
pool.start(&b_2);
pool.waitForDone();
;
包含线程任务的类:
class bm_1 : public QRunnable //bm_2 looks just like bm_1
public:
void test_1();
void run()
test_1();
;
主函数被 QTest 宏替换:
QTEST_MAIN(Bm)
QTEST_MAIN 返回 0,这意味着,根据 Qt 文档,没有要测试的内容。如果我现在尝试使用调试器来了解可能出现的问题,我会收到两个启动错误:
Gdb 进程已终止(0)
和
在启动过程中程序退出,代码为 0xc0000138
我做错了什么?
我需要 QTest
(而不是例如 ellapsedTimer)来衡量没有操作系统和 adobe 更新程序污染的性能。这是一台公司拥有的笔记本电脑。我检查了我的包含,甚至重新安装了 Qt。
【问题讨论】:
【参考方案1】:我发现我做错了。
包含我的基准测试的类称为Bm
,实现它的文件称为benchmar.cpp
和benchmark.h
。将类名更改为benchmark
解决了这个问题。
为什么我不知道,我阅读 QObject 4.8 文档并没有让我更进一步。 Soo... 还有一个怪癖。
嘿嘿!
【讨论】:
以上是关于QTEST_MAIN 不使用提供的 Testclass的主要内容,如果未能解决你的问题,请参考以下文章
sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 74 个
sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用 1,提供了 4 个