QTEST_MAIN 不使用提供的测试类
QTEST_MAIN doesn't use provided Testclass
我想对线程及其交互(例如共享数据)进行性能测试。为此,我尝试了 Qt 提供的基准测试教程,这让我编写了以下代码。
基准-Class:
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:
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 returns 0,这意味着,根据 Qt 文档,没有要测试的内容。如果我现在尝试使用调试器来大致了解可能出现的问题,我会收到两个启动错误:
The Gdb-process was terminated(0)
和
During startup program exited with code 0xc0000138
我做错了什么?
我需要 QTest
(而不是 ellapsedTimer)来衡量没有 OS 和 adobe updater 污染的性能。这是公司拥有的笔记本电脑。我检查了我的包含,我什至重新安装了 Qt。
我发现我做错了。
包含我的基准的 class 称为 Bm
,实现它的文件称为 benchmar.cpp
和 benchmark.h
。将 class 的名称更改为 benchmark
解决了问题。
为什么那是我不知道的,我阅读 QObject 4.8 文档并没有让我更进一步。 Soo... 又一个怪癖。
哇哦!
我想对线程及其交互(例如共享数据)进行性能测试。为此,我尝试了 Qt 提供的基准测试教程,这让我编写了以下代码。
基准-Class:
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:
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 returns 0,这意味着,根据 Qt 文档,没有要测试的内容。如果我现在尝试使用调试器来大致了解可能出现的问题,我会收到两个启动错误:
The Gdb-process was terminated(0)
和
During startup program exited with code 0xc0000138
我做错了什么?
我需要 QTest
(而不是 ellapsedTimer)来衡量没有 OS 和 adobe updater 污染的性能。这是公司拥有的笔记本电脑。我检查了我的包含,我什至重新安装了 Qt。
我发现我做错了。
包含我的基准的 class 称为 Bm
,实现它的文件称为 benchmar.cpp
和 benchmark.h
。将 class 的名称更改为 benchmark
解决了问题。
为什么那是我不知道的,我阅读 QObject 4.8 文档并没有让我更进一步。 Soo... 又一个怪癖。
哇哦!