2016-04-08 9 views
0

Я хочу выполнить тест производительности на потоки и их взаимодействия (например, общие данные). Чтобы достичь этого, я попробовал Qt, предоставленный Tutorial for Benchmarks, который заставил меня написать следующий код.QTEST_MAIN не использует предоставленный Testclass

эталоном класса:

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, ничего не нужно тестировать. Если теперь я пытаюсь использовать отладчик, чтобы получить glimp, что может пойти не так, я получаю два запуска-ошибки:

Gdb-процесс был прекращен (0)

и

Во время запуска программы завершался с кодом 0xc0000138

Что я сделал не так?

Мне нужно QTest (а не, например, ellapsedTimer) для измерения производительности без загрязнения ОС и мерцающего обновления. Это принадлежащий компании ноутбук. Я проверил свои включения, и я даже переустановил Qt.

ответ

0

Я нашел свою ошибку. Класс, который содержал мой бенчмарк, назывался Bm, файлы, которые он был реализован, назывались benchmar.cpp и benchmark.h. Изменение имени класса на benchmark решило проблему.

Почему это у меня нет подсказки, и я читаю QObject 4.8. Документация еще не получила меня. Су ... еще одна причуда, с которой можно жить.

Whoohey!

 Смежные вопросы

  • Нет связанных вопросов^_^