2016-04-08 40 views
0

我想對線程及其交互(例如共享數據)進行性能測試。爲了達到這個目的,我嘗試了Qt提供的基準測試教程,這使我可以編寫下面的代碼。QTEST_MAIN不使用提供的測試類

的基準級:

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(); 
     } 
    } 
}; 

包含該線程任務類:

QTEST_MAIN(Bm) 

class bm_1 : public QRunnable   //bm_2 looks just like bm_1 
{ 
public: 
    void test_1(); 
    void run() 
    { 
     test_1(); 
    } 
}; 

主要功能獲得由QTEST宏替換

QTEST_MAIN返回0,這意味着,根據Qt文檔,沒有什麼可測試的。如果我現在嘗試使用調試器,得到一個什麼樣可能出錯一個glimp,我得到兩個啓動 - 錯誤:

GDB的進程被終止(0)

在啓動程序退出,代碼0xc0000138

我做了什麼錯?

我需要QTest(而不是ellapsedTimer)來測量沒有OS和adobe updater污染的性能。這是一家公司擁有的筆記本電腦我檢查了我的包裝,我甚至重新安裝了Qt。

回答

0

我發現我做錯了。 包含我的基準的類被稱爲Bm,它實現的文件被稱爲benchmar.cppbenchmark.h。更改類名稱爲benchmark解決了問題。

爲什麼這是我沒有線索和我閱讀QObject 4.8 dokumentation沒有讓我更進一步。 Soo ...再一次和你一起生活。

Whoohey!

相關問題