31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
1

Как правильно ипользовать clock() и GetTickCount()?

18.07.2011, 10:08. Показов 30707. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
я и гуглил и по сайту яндаксил но так и не в курил как правильно ипользовать эти функции(clock() и GetTickCount())
вот код в котором я хочу за сечь время выполнения цикла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 #include <iostream>
 using namespace std;
 
int main()
    {
    locale::global(locale("rus"));
    for (int num = 100;num >= 0;num--)
      {
        cout<<num<<"\t";
      }
    system("pause");
    return 0;
}
пожалуйста помогите!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2011, 10:08
Ответы с готовыми решениями:

Автоматически сбрасываются частоты Core clock Шейдеров и Memory clock, AMD M2N-MX se plus
Добрый Вечер! У меня такая проблема: Во время игры падает фпс(Кол-во Кадров в секунду),нажимаю...

Возможно ли сделать отсчет времени в лотусе Clock In/ Clock Out
Привет лотусистам! Такая вот задача. Когда человек приходит на работу он в лотусе где то ставит...

Core clock и Memory Clock - что это за параметры?
Core clock и Memory Clock разъясните мне, пожалуйста, что это за параметры? По умолчанию Core Clock...

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

15
4 / 4 / 1
Регистрация: 18.04.2010
Сообщений: 82
18.07.2011, 10:17 2
Я для таких целей юзал tickGet(), правда операционка была vxWorks, потому не знаю есть ли такое в виндею Если нет, то поищите аналог - это взятие текущего време6ни (отсчет, если не ошибаюсь от начала запуска системы)ю Берете значение перед выполнением цикла, потом после выполнения цикла, а разница между этими двумя значениями и будет именно то, что вам необходимо.
0
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 10:18  [ТС] 3
повробавол tickGet() окошки на него ругаются
0
4 / 4 / 1
Регистрация: 18.04.2010
Сообщений: 82
18.07.2011, 10:37 4
Если честно, то сейчас уже не вспомню точно, что я юзал в винде, но мне почему-то кажется, что это была ф-ия именно clock().
0
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 10:42  [ТС] 5
а как ей правильно пользоваться?

Добавлено через 20 секунд
на премере этого кода
0
4 / 4 / 1
Регистрация: 18.04.2010
Сообщений: 82
18.07.2011, 10:55 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 #include <iostream>
 using namespace std;
 
int main()
    {
    locale::global(locale("rus"));
int firstly_time = clock();
        for (int num = 100;num >= 0;num--)
          {
                cout<<num<<"\t";
          }
int secondary_time = clock();
        system("pause");
 
int finish_time = secondary_time - firstly_time;
        return 0;
}
P.S. Возможно я прогадал с возвращаемым значением у clock() (мб это не int). Возможно возвращает _ttime, но это, если не ошибаюсь, тот же продефайненый int. Идейя вцелом такая, как написл, думаю что более или менее понятно.
0
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 12:26  [ТС] 7
пишит что индификатор clock() не определён
как я по немаю нужно подключить какуета библеотку?
0
4 / 4 / 1
Регистрация: 18.04.2010
Сообщений: 82
18.07.2011, 12:39 8
Цитата Сообщение от leoned Посмотреть сообщение
пишит что индификатор clock() не определён
как я по немаю нужно подключить какуета библеотку?

Попробуй в начало дописать:

#include <time.h>
0
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 12:43  [ТС] 9
а в чём выводится ризультат?в секундах или милисекундах?
0
4 / 4 / 1
Регистрация: 18.04.2010
Сообщений: 82
18.07.2011, 12:48 10
Цитата Сообщение от leoned Посмотреть сообщение
а в чём выводится ризультат?в секундах или милисекундах?
Цитата Сообщение от MSDN
Return Value

The elapsed wall-clock time since the start of the process (elapsed time in seconds times CLOCKS_PER_SEC). If the amount of elapsed time is unavailable, the function returns –1, cast as a clock_t.
В секундах, а возвращает тип clock_t, чуется мне, что это как раз и есть задефайненный int.
0
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 12:54  [ТС] 11
ага 46 секунд для цикла в 100 инацилизаций через чур много!!!

Добавлено через 1 минуту
без cout 15-13 и то до фига!
1
4 / 4 / 1
Регистрация: 18.04.2010
Сообщений: 82
18.07.2011, 12:56 12
Странно... Хотя... Сорри, наверное все-таки в ms, ибо я сейчас вспоминаю, что юзал эту ф-ию когда trace для работы с сетью делал, а там были у меня везде единицы измерения ms, значит скорее всего и у Вас также
1
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 12:59  [ТС] 13
тогда всё встоёт на свои место спасибо !(кнопочку нажал
0
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
18.07.2011, 13:19 14
C++
1
2
3
4
DWORD t1 = GetTickCount();
//...Профилируемый код...
DWORD t2 = GetTickCount();
DWORD time = t2 - t1;
Но это неточно...
Для большей точности нужно использовать счетчик монитора производительности:
C++
1
2
LARGE_INTEGER time;
QueryPerfomanceCounter(&time);
Ну а САМЫЙ точный метод - это использование счетчика меток реального времени TSC (Time Stamp Counter (Начиная с Pentium III)
C++
1
2
3
4
unsigned __int64 GetCycleCount(void)
{
    _asm rdtsc
}
Если ваш компилятор не понимает этой команды можно использовать машинное представление:
C++
1
2
_asm _emit 0x0F
_asm _emit 0x31
Но там есть геморрой:
этот счетчик нужно калибровать...
2
31 / 31 / 0
Регистрация: 30.06.2011
Сообщений: 467
18.07.2011, 13:23  [ТС] 15
Цитата Сообщение от prZzZ Посмотреть сообщение
Для большей точности нужно использовать счетчик монитора производительности:
а по подробней можно?(желательно сразу в код всунуть а то я нуб)
0
Программист
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
18.07.2011, 13:53 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <windows.h>
 
int main()
{
    LARGE_INTEGER freq;
    LARGE_INTEGER t1;
    LARGE_INTEGER t2;
    if(QueryPerformanceFrequency(&freq))
    {
        QueryPerformanceCounter(&t1);
        //...Профилируемый код...
        QueryPerformanceCounter(&t2);
        double dt = t2.QuadPart - t1.QuadPart;
        double elapsed_time = 1000 * dt / freq.QuadPart; // время выполнения в миллисекундах...
    }
    else
    {
        // ОШИБКА!!! Счетчик монитора производительности не поддерживается системой...
    }
    return 0;
}
Добавлено через 11 минут
И, обратите внимание, на результат будет очень сильно влиять режим компиляции (Debug/Release).
7
18.07.2011, 13:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2011, 13:53
Помогаю со студенческими работами здесь

Как ипользовать jquery в js коде на стороннем сайте?
Добрый день. мне нужно, чтобы на сайте подключался js файл, использующий библиотеку jquery. Но...

Как написанную функцию на одной форме ипользовать в другой
Всем доброго времени суток. Имеется функция void Add(void). Прописал её прототип в...

Можно ли ипользовать HSV палитру через JS и если да, то как?
Или подобную. Делаю рендом, и rgb с hex-ом мне очень не удобны. Мне бы HSV, но не могу найти как...

Как можно изменить время в GetTickCount?
Как можно изменить время в GetTickCount? Или как изменить время работы в деспетчере задач?


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru