Модераторы: Daevaorn

Поиск:

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


Новичок



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

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



Всех с праздничком!

1) Подскажите, пожалуйста, есть ли в C++ возможность зафиксировать время работы программы от момента её запуска, например? С помощью какой функции это возможно сделать? (имеется в виду с точностью хотя бы до десятых секунды)

2)Зависит ли время обработки программы при одинаковых исходных данных от чего либо, кроме загрузки процессора?

Это сообщение отредактировал(а) Sasisa - 8.4.2007, 20:43
PM MAIL   Вверх
Mayk
Дата 8.4.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(Sasisa @  9.4.2007,  00:40 Найти цитируемый пост)


1) Подскажите, пожалуйста, есть ли в C++ возможность зафиксировать время работы программы от момента её запуска, например? С помощью какой функции это возможно сделать? (имеется в виду с точностью хотя бы до десятых секунды)

да хотя бы через clock().
Код

void sth(){
  clock_t start_time = clock();
  do{something}
  double secs = double(clock()-start_time)/CLOCKS_PER_SEC;
  cout << "time elapsed: " << secs << endl;
}



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
ama_kid
Дата 8.4.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Мне кажется такое решается с помощью отдельного потока (если, конечно, среда не DOS). Запускаешь поток, делаешь ему Sleep("Время работы в секундах") и перед завершением потока - завершаешь основной процесс...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
bsa
Дата 8.4.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Sasisa @ 8.4.2007,  20:40)
2)Зависит ли время обработки программы при одинаковых исходных данных от чего либо, кроме загрузки процессора?

Да. Например, от загруженности дисковой подсистемы, если данные берутся с диска.
PM   Вверх
Sasisa
Дата 8.4.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Среда как раз Dos...

попробовал использовать Clock(), но в результате время обработки программы оказывается 0.00000

К примеру, при таком варианте время обработки так же выдается 0.00000
Код

int main(void)
{
   clock_t start, end;
   start = clock();

   delay(20);

   end = clock();
   printf("The time was: %f\n", (end - start) / CLK_TCK);
   getch();

   return 0;
}


если же поставить delay(200), то время будет примерно таким 0.164352
Хоть программный код подопытной проги не очень большой, но все таки хотелось бы видеть хоть какие доли секунды, а не нули...как быть? может есть еще какие варианты или нюансы?
PM MAIL   Вверх
Rickert
Дата 9.4.2007, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Код

   printf("The time was: %d\n", (end - start) / CLK_TCK);

А так?


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Dov
Дата 9.4.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Rickert @  9.4.2007,  05:53 Найти цитируемый пост)
А так?

Скорее так
Код

printf("The time was: %f\n", (double)(end - start) / CLK_TCK);





--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
vinter
Дата 9.4.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



скорее так smile 
Код

printf("The time was: %d\n", (end - start));

время в миллисекундах



--------------------
Мой блог
PM MAIL WWW   Вверх
Sasisa
Дата 9.4.2007, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Лучше всего работает вариант, предложенный Dov

Код

printf("The time was: %f\n", (double)(end - start) / CLK_TCK);


но все равно не достаточно точно :( например, при задержке delay(10) уже показывает нули.
может стоит запускать прогу на Pentim I или вообще на 486? smile
PM MAIL   Вверх
FiMa1
Дата 9.4.2007, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А может лучше профайлером таки замерить.. и наглядно и действенно.. Могу отсоветовать vTune.
PM   Вверх
Daevaorn
Дата 9.4.2007, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(FiMa1 @  9.4.2007,  12:35 Найти цитируемый пост)
Могу отсоветовать vTune.

Вот правильно, vTune можно только отсоветовать. AQtime - реальный инструмент
PM MAIL WWW   Вверх
Rickert
Дата 9.4.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



Короче юзайте GetTickCount(), а не какой-то гонимый clock()


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Sasisa
Дата 9.4.2007, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем спасибо!
буду искать варианты из вышепредложенного smile

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


Шустрый
*


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

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



Если clock показывает 0.0000 значит прошло очень мало времени. 
Цитата

(имеется в виду с точностью хотя бы до десятых секунды)

так что тебе хаватит

А при замере времени выполнения алгоритма обычно его помещают в цикл while (i < 10000) ....

Я  показывал преподавателю результаты замера с помощью профайлера, он объяснял на примере с ниткой: размер нитки трудно измерить,
 измерить толщину мотка уже проще. Да.. давно уже было....
PM MAIL   Вверх
Daevaorn
Дата 9.4.2007, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

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



Цитата(Rickert @  9.4.2007,  13:38 Найти цитируемый пост)
Короче юзайте GetTickCount(), а не какой-то гонимый clock()

А мой компилятор не понимает GetTickCount() :(
PM MAIL WWW   Вверх
JackYF
Дата 10.4.2007, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Rickertsmile

<imho>
Я тоже не понимаю, зачем юзать непереносимый GetTickCount() там, где нужна точность до десятых секунды.
Кстати! smile
Это только в Виндах clock() такой неточный.
В Линухах им можно сотнитысячные доли секунды замерять.

И кто там гонимый? smile Может, все же Винда, которая стандартам не следует, а все свой АПИ раздувает? smile
</imho>



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Rickert
Дата 10.4.2007, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

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



GetTickCount() есть в vs это точно.
Ну раз уж на то пошло, то надо юзать time(0).
Он точно есть и в gcc и в vs.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
fantast
Дата 10.4.2007, 10:46 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

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



 а по мне лучше всего timeGetTime. Это времы которое прошло с начала старта системы (ОС). Оно кажется ваще считается самой виндой в своих потоках и точность там огого. измеряется в милисекундах.
мне кажется лучший вариант
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
JackYF
Дата 10.4.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Цитата(Rickert @  10.4.2007,  03:50 Найти цитируемый пост)
time(0).


оно в секундах время выдает. Маловато может быть.



Цитата(fantast @  10.4.2007,  10:46 Найти цитируемый пост)
timeGetTime. Это времы которое прошло с начала старта системы (ОС). Оно кажется ваще считается самой виндой


Вот... опять все виндовые АПИ. ИМХО, конечно )



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Mayk
Дата 10.4.2007, 17:55 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(Rickert @  10.4.2007,  07:50 Найти цитируемый пост)
GetTickCount() есть в vs это точно.

Цитата(fantast @  10.4.2007,  14:46 Найти цитируемый пост)
Оно кажется ваще считается самой виндой в своих потоках и точность там огого. измеряется в милисекундах.
мне кажется лучший вариант 

 smile 

Замечано, что WinApi очень плохо работает в
Цитата(Sasisa @  9.4.2007,  03:50 Найти цитируемый пост)
Среда как раз Dos...
.

хотя бы в силу своего отсутствия.


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
fantast
Дата 10.4.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

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



ггг ну да ступил немножко, недосмотрел   smile 
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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