2013-03-14 3 views
0

EDIT: похоже, что он функционирует сейчас. Код обновлен, чтобы показать мои изменения. Спасибо за вашу помощь.<time.h>/<ctime> не считаются клещами

Я предполагаю, что я просто глуп, но я пытаюсь использовать ctime для подсчета количества циклов процессора по всей моей программе. Я пишу алгоритм шифрования для школьного проекта, и я пытаюсь включить таймер, чтобы добавить шумовые процессы, уравнив количество времени между различными комбинациями клавиш/открытого текста. Вот небольшой тест для CTime:

#include <iostream> 
#include <string> 
#include <ctime> 

int main (int arc, char **argv) 
{ 
    double elapsedTime; 
    const clock_t start = clock(); 

    int uselessInt = 0; 
    for (int i = 0; i <= 200; i++) 
    { 
     uselessInt = uselessInt * 2/3 + i; 
     std::cout << uselessInt << std::endl; 
    } 

    clock_t end = clock(); 
    elapsedTime = static_cast<double>(end - start); 

    std::cout << elapsedTime << " CPU ticks have elapsed since this application's initiation." << std::endl; 
    return (0); 
} 

который печатает:

0 
1 
2 
4 
/* ... long list of numbers ... */ 
591 
594 
0 CPU ticks have elapsed since this application's initiation. 
[[email protected] Desktop]$ 

Я использую GCC (G ++) и, кажется, что CTIME/time.h просто не считая тиков, как я хочу этого. Может ли кто-нибудь определить проблему? Я относительный любитель на этом языке.

+1

'clock()' обычно измеряет время процессора в системах, отличных от Windows. Вероятно, вы не используете достаточное количество процессорного времени для отображения этой короткой программы. См. Http://stackoverflow.com/q/2134363/10077 –

+0

Нет, проблема в том, что он отбрасывает от тиков до секунд. –

+1

В этой программе отсутствует ')'. –

ответ

2

Мои два цента. Когда вы выполняете cin.get(), он ждет, когда вы введете что-то на консоль, вы что-нибудь сделали или просто набрали ввод?

Я запустить свой код без ввода какой-либо текст, а просто нажать клавишу ВВОД, он дал следующий результат:

Test Text 
It's a stone, Luigi... you didn't make it. 
0 CPU ticks have elapsed since this application's initiation. 

Real 0m0.700s 
User 0m0.000s 
Sys  0m0.061s 

Это может быть потому, что точность CLOCKS_PER_SEC является своего рода «большой» (в секундах), по сравнению к тому времени ЦП, используемого программой

Между тем, ошибка синтаксиса в продолжительности линии, вы либо пропустили другую), либо должны удалить первый (

КСТАТИ: Real время настенных часов - время от начала до конца из e вызов.

Пользователь - это количество процессорного времени, затраченного на код пользовательского режима (вне ядра) в рамках процесса. Это только фактическое время процессора, используемое при выполнении процесса.

Sys - это количество процессорного времени, затраченного на ядро ​​в процессе.

Итак, у вас в основном есть 0 процессорного времени, так как вы продолжаете ждать ввода-вывода, нет вычисления ЦП.

+0

Я попытался выполнить это с разделением CLOCKS_PER_SEC и без него. Он обеспечивает нуль в любом случае. Я ввел в консоль непонятные строки шума. Это вызывает какие-то проблемы? Я бы не подумал, что это проблема. Есть ли другой способ, который я могу использовать, который будет измерять тактовые сигналы по всему процессу, а не останавливаться при ожидании ввода-вывода? Конечно, было бы легче протестировать. – smalltock

+0

@smalltock Так как ваша программа не делает никакого вычисления ЦП, поэтому клики должны быть равны нулю. Но время настенных часов не равно нулю. ваш процесс должен иметь некоторое вычисление ЦП. Например, вычислите сумму от 1 до 1000, для этого требуется вычисление ЦП, и вы можете измерить клики. – taocp

2

elapsedTime в вашей программе - это мера времени в секундах, а не количество тактов. Если вам нужны тики, используйте duration.

Поскольку ваша программа (предположительно) тратит большую часть своего времени на блокировку ввода-вывода, не прошло много секунд.

+0

Настоящая проблема заключается в том, что он ошибается. –

+1

Как неправо? В значительной степени независимо от того, где пропадает недостающий ')', все будет хорошо. –