Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Время работы функции 
:(
    Опции темы
max07
Дата 14.3.2006, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 21.12.2004

Репутация: нет
Всего: нет



Всем прюбет,

какой есть способ узнать сколько времени работала функция например в секундах smile

Спасибо.

Это сообщение отредактировал(а) max07 - 14.3.2006, 00:57
PM MAIL   Вверх
Nemesis
Дата 14.3.2006, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: нет
Всего: 5



Да можно вот так:

...
long before = GetSystemTime();

func(); // твоя функция

long delta = GetSystemTime() - before; // время выполнения в миллисекундах

...
--------------------
PM MAIL   Вверх
Ctrl_Alt_Del
Дата 14.3.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 11.3.2006
Где: Ставрополь

Репутация: 2
Всего: 2



Или так

Код

...
long t0=GetTickCount();
func(); 
long time=GetTickCount();
...


smile
PM MAIL ICQ   Вверх
_hunter
Дата 14.3.2006, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



лучше GetThreadTimes использовать -- будет учтено время _не работы_ потока.
хотя если время нужно только для сравнения, можно и простые time-ы использовать


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
max07
Дата 14.3.2006, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 21.12.2004

Репутация: нет
Всего: нет



Цитата

будет учтено время _не работы_ потока


_hunter, как понять?
PM MAIL   Вверх
_hunter
Дата 14.3.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



так и понять. в системе по-очередно работает несколько потоков
если утрировать, то два потока на одном процессоре работают по пол секунды. а GetTickCount покажет что поток проработал одну


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
max07
Дата 14.3.2006, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 21.12.2004

Репутация: нет
Всего: нет



Nemesis, какие include'ы нужны для GetSystemTime(), а то вот чё выкидывает:

Код

[C++ Error] Unit2.cpp(105): E2193 Too few parameters in call to '__stdcall GetSystemTime(_SYSTEMTIME *)'




Defucker, в каких единицах эта функция выдаёт результат?
PM MAIL   Вверх
_hunter
Дата 14.3.2006, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



никаких инклюдов не нужно.
ты ее вызываеш не правильно.
а результат она выдает в указателях на SYSTEMTIME


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
max07
Дата 14.3.2006, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 21.12.2004

Репутация: нет
Всего: нет



а почему так получается что время до функции и после одинаковое. Всегда получается 0...
PM MAIL   Вверх
Partizan
Дата 14.3.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



возможно точности возвращаемого результата недостаточно....либо ты для хранения используешь не тот тип...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Nemesis
Дата 15.3.2006, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 20.2.2005
Где: Москва

Репутация: нет
Всего: 5



Можно так:

Код

#include <windows>
...

  SYSTEMTIME stBefore, stAfter;

  GetSystemTime(&stBefore);
  func();
  GetSystemTime(&stAfter);

  long secondCount = stAfter.wSecond - stBefore.wSecond;               // скока секунд заняло +
  long milliSecCount = stAfter.wMilliseconds - stBefore.wMilliseconds; // скока миллисекунд заняло

...



Можно узнать также сколько минут, дней и лет заняло выполнение функции smile

Кстати, вызов такой функции

Код

void func()
{
  int j=2;
  for(int i=0; i<1000000; i++)
    j *= j;
}


занял 16 миллисекунд, а такой функции

Код

void func()
{
  int j=2;
  for(int i=0; i<1000000000; i++)
    j *= j;
}


уже 16 секунд smile

P.S. По-хорошему надо еще делать проверку на то, кто больше stAfter.wSecond или stBefore.wSecond, потому что если длительная функция, то будем отрицательный и неправильный результат.

Это сообщение отредактировал(а) Nemesis - 15.3.2006, 02:16
--------------------
PM MAIL   Вверх
Ctrl_Alt_Del
Дата 15.3.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 11.3.2006
Где: Ставрополь

Репутация: 2
Всего: 2



max07
Цитата

в каких единицах эта функция выдаёт результат?

GetTickCount() возвращает результат в миллисекундах.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0836 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.