& Lt; time.h & GT; / & lt; ctime & gt; не считая тиков

РЕДАКТИРОВАТЬ: Кажется, он работает сейчас. Код был обновлен, чтобы показать мои ревизии. Спасибо за вашу помощь.

Я полагаю, что я просто глуп, но я пытаюсь использовать 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.
[smalltock@localhost Desktop]$

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

0

Решение

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

Я запустил ваш код, не набирая текст, а просто нажал ввод, он дал следующий вывод:

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 является «большой» (в секундах) по сравнению с временем процессора, используемым вашей программой.

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

КСТАТИ:
Реальное время настенные часы — время от начала до конца разговора.

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

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

Таким образом, у вас в основном 0 процессорного времени, так как вы продолжаете ждать ввода-вывода, без вычислений процессора.

2

Другие решения

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

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

2