Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 41, средняя оценка - 4.66
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
#1

Измеряем время выполнения - C++

15.08.2011, 23:45. Просмотров 5617. Ответов 3

Иногда нужно узнать сколько времени выполняется функция или сравнить алгоритмы по скорости работы.
Вот примеры того, как это можно сделать.

->Использовать следующий класс(CTimer.rar)
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include "CTimer.h"
 
int main()
{
    CTimer Time;
    Time.Start();
    
    /*
    код или вызов функции, время исполнения
    которой нужно измерить
    */
    
    Time.End();
    std::cout << Time.GetTimeInSeconds() 
          << " seconds" << std::endl;
    return 0;   
}
файл CTime.h из вложения нужно поместить в папку с кодом вашей программы или просто добавить в нее этот
код
#include <windows.h>

class CTimer
{
public:
CTimer()
{
QueryPerformanceFrequency(&mqFreq);
}
~CTimer() {}

void Start()
{
QueryPerformanceCounter(&mqStart);
}
void End()
{
QueryPerformanceCounter(&mqEnd);
}
double GetTimeInSeconds()
{
return (mqEnd.QuadPart - mqStart.QuadPart)/static_cast<double>(mqFreq.QuadPart);
}
private:
LARGE_INTEGER mqStart;
LARGE_INTEGER mqEnd;
LARGE_INTEGER mqFreq;
};


->Еще вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <ctime>
 
int main()
{
    const clock_t start = clock();
    
    /*
    êîä èëè âûçîâ ГґГіГ*êöèè, âðåìÿ èñïîëГ*ГҐГ*ГЁГї
    êîòîðîé Г*ГіГ¦Г*Г® èçìåðèòü
    */
    
    const double time = static_cast<double>(clock() - start) / CLOCKS_PER_SEC;
    std::cout << time << " seconds" << std::endl;
    return 0;   
}
->Используя Boost
C++
1
2
3
4
boost::posix_time::ptime start = boost::posix_time::second_clock::local_time();
//действие...
boost::posix_time::ptime end = boost::posix_time::second_clock::local_time();
std::cout << (end - start).total_seconds() << std::endl;
---
ссылка на MSDN
->предлагайте еще варианты, кроме:
1.Взять секундомер
2.Запустить программу и нажать "старт"
3.????
4.PROFIT
5
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.08.2011, 23:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Измеряем время выполнения (C++):

Время выполнения - C++
Скажите, как я могу сравнить время выполнения 2 функций? Желательно сразу готовый код.

Время выполнения - C++
Я здесь в первый раз и ещё не разобралась с форумом, дико извиняюсь если что не так. Мне нужно чтобы определялось время выполнения...

Время выполнения функции - C++
Здравствуйте! Посмотрите пожалуйста, почему у меня время всегда равно 0? #include &quot;stdlib.h&quot; #include &quot;stdio.h&quot; #include &quot;conio.h&quot;...

Время выполнения функции - C++
Вопрос - как можно измерить время выполнения функции? clock() не подходит, т.к функции выполняются быстрее миллисекунды. есть способ как...

Ошибка во время выполнения - C++
есть такой вот кусочек кода, компилириуются без ошибок, а в процессе выполнения ругает int t = 0; ifstream fin; fin.open...

Время выполнения(сложность) - C++
Как вычислить время выполнения программы? и что такое NlogN?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
Freelance
Эксперт С++
2847 / 1784 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
15.08.2011, 23:50 #2
Цитата Сообщение от Mayonez Посмотреть сообщение
предлагайте еще варианты
Вот и вот
Еще:
C++
1
2
3
4
5
6
#include<windows.h>
 
double start = GetTickCount();
///// действия
double finish = GetTickCount();
finish - start; // резалт
Для g++ еще видел такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
static inline unsigned long long int tick()
{
unsigned long long int d;
__asm__ __volatile__ ("rdtsc" : "=A" (d) );
return d;
}
 
int main()
{
    unsigned long long int a = 0;
    unsigned long long int b = 0;
    a=tick();
   //действия
    b=tick();
    cout<<b-a<<endl;
    return 0;
}
2
pety
1 / 1 / 0
Регистрация: 11.12.2014
Сообщений: 116
02.05.2015, 00:11 #3
Цитата Сообщение от asics Посмотреть сообщение
Для g++ еще видел такое
В каких единицах результат?
0
DrOffset
7138 / 4279 / 964
Регистрация: 30.01.2014
Сообщений: 7,073
02.05.2015, 02:29 #4
Цитата Сообщение от pety Посмотреть сообщение
В каких единицах результат?
В тактах процессора.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2015, 02:29
Привет! Вот еще темы с ответами:

Время выполнения процеса - C++
Подскажите пожалуйста, как правильно пользоваться функцией GetTheadTimes если есть хэндл процеса и вывести в нормальной форме время...

Время выполнения сортировки - C++
Всем доброго времени суток. Дело такое: задача стоит оценить сортировки по критерию время. Ну я написал нужные сортировки и пытаюсь...

Ошибка во время выполнения - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;fstream&gt; #include &lt;vector&gt; using namespace std; ifstream fin(&quot;input.txt&quot;);...

Время выполнения программы - C++
Здравствуйте.Я до сих пор новичок в программировании,сразу скажу,и тонкостей не знаю. Собрал я тут программу с использованием CUDA.И...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.05.2015, 02:29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru