LINUX.ORG.RU

Странный QTimer!!!!!!!


0

0

Блин хотел сделать прогу для тестирования систем, начал как водится с камня.
И что же получилось? Генератор случайных чисел, ну не совсем случайных, но тем не менее.

Вот что выводится, когда тестирутся и плавющая точка и статичечкая:


/********* Test was Start Succesful *********/

Processor test was begin!
Processor test was Finish:
Result This test is 96501 points

/********* Test was Finish Succesful *********/

Total Points: 96501 points!

в данном случае не очки а милисекунды, удивительно то, что это значение набежало за 16 секунд!!!!
Как не трудно подсчитать сдесь должно быть около 16000 минус время задержки на передачу сообщения.
Не могу понять в чём прикол, но это даже не самое интересное, самое интересное то что иногда выпадают числа
лежащие в диапазоне 100000000 - 300000000 милисекунд, но редко. И даже не это интересно, в этой программе предусмотрена возможность тестрования только плавющей точки и статичечкой, и вот тут как раз десерт, когда я выбираю только плавующую то получаю приблизтельно такой же результат как описан выше, но, ВНИМАНИЕ!!!, когда я выбираю только статику, которая делается за секунду я получаю числа в диапазоне 100000000 - 300000000 милисекунд !!! Прикольно да, это получатся матрица какая то, т.е. что я не замечаю как пролетает несколько часов :))) Вообщем и не знаю что думать по этому поводу. Просто рулетка какая то.


t.start();
/************* This block testing floating point operations ************/
if (flt)
{
for (int i = 0; i < 500; i ++)
{
t.restart();
for (double x = 0.0; x < 1.0; x+=0.00001)
{
double y = exp(x);
}
t_f += t.restart();
}

t_f = t_f/500;

}
/***********************************************************/

/**************This block testing static point operations**************/
if (stat)
{
for (int i = 0; i < 500; i++)
{
t.restart();
int k = 0;
for (int j = 0; j < 100000; j++)
{
k+=j*k+k*k;
}
t_s += t.restart();
}
t_s = t_s/500;
}
/***********************************************************/

t_r = t_s + t_f;
int result = t_r;

Помогите разобраться!

Заранее спасибо!!!!

★★★★★


Не понял чего надо от QTimer? QTimer вызывает заданную процедуру (callback) по истечении времени.
Если надо измерить промежуток времени между двумя событиями логичнее использовать
QTime a;
a.start();
{
some calculations
}

int ms = a.elapsed();






anonymous
()
Ответ на: комментарий от anonymous

Опечатка не QTimer а QTime. Так то что можно юзать elapsed() я знаю но надо использовать именно restart() она возвращает текуще значение таймера и перезапускает его, но как написал выше, она возвращает странные значения :(

cyclon ★★★★★
() автор топика
Ответ на: комментарий от cyclon

Скорее всего дело в том, что один цикл между вызовами restart() занимает слишком мало времени. От системы QTime берет время через gettimeofday(). Поэтому измерить время с точностью выше чем 10 ms в linux с помощью gettimeofday/QTime не получиться.Если нужно чтобы QTime:restart() не "врал" его надо вызывать не чаще чем 10 (а лучше 20-50 ms).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.