0

我想对线程及其交互(例如共享数据)进行性能测试。为此,我尝试了 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。

4

1 回答 1

0

我发现我做错了。包含我的基准的类被称为Bm,它被实现的文件被称为benchmar.cppbenchmark.h。更改类的名称以benchmark解决问题。

为什么我不知道,我阅读 QObject 4.8 文档并没有让我更进一步。苏……还有一个怪癖。

嘿嘿!

于 2016-04-08T14:17:23.987 回答