2016-04-08 3 views
0

Je souhaite effectuer un test de performance sur les threads et leurs interactions (par exemple, des données partagées). Pour ce faire, j'ai essayé le tutoriel fourni par Qt pour Benchmarks, qui m'a conduit à écrire le code suivant.QTEST_MAIN n'utilise pas la classe de test fournie

L'indice de référence Classe:

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

La classe qui contient la tâche pour le fil:

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

La fonction principale sera remplacé par un QTest-macro:

QTEST_MAIN(Bm) 

QTEST_MAIN renvoie 0, ce qui signifie que, selon la documentation Qt, il n'y a rien à tester. Si je vais maintenant essayer d'utiliser le débogueur, pour obtenir un glimp de ce qui pourrait aller mal, je reçois deux démarrage-erreurs:

GdB processus a pris fin (0)

et

Au cours de programme de démarrage liquide' avec le code 0xc0000138

Qu'est-ce que je fait de mal?

J'ai besoin de QTest (et non par exemple ellapsedTimer) pour mesurer la performance sans pollution de mise à jour d'OS et d'adobe. C'est un ordinateur portable appartenant à l'entreprise. J'ai vérifié mes inclusions, et j'ai même réinstallé Qt.

Répondre

0

J'ai trouvé que j'avais tort. La classe qui contenait mon banc d'essai s'appelait Bm, les fichiers dans lesquels elle était implémentée étaient appelés benchmar.cpp et benchmark.h. La modification du nom de la classe en benchmark a résolu le problème. Pourquoi est-ce que je n'ai aucune idée et moi en lisant le QObject 4.8 dokumentation ne m'a pas eu plus loin. Soo ... encore une bizarrerie à vivre avec.

Whoohey!