LINUX.ORG.RU

Выполнение инкрементирования в течение определенного времени

 , ,


0

1

Подскажите, пожалуйста, как реализовать операцию инкрементирования переменной так, чтобы ее значение выводилось раз в несколько секунд. Мне приходит в голову такой вариант:

i = 0;
while (time < 10s)
{
 i++;
}
printf ("i = %d\n", i);
Проблема в том, что в программе бессмысленно писать time < 10s.



Последнее исправление: beastie (всего исправлений: 2)

Для начала, надо сменить фармацефта.

pon4ik ★★★★★
()

Как же я туплю) Сделал так:


int i = 0, sec = 1, elapsed;
time_t start, end;
while (1)
{
 time (&start);
 while (elapsed < sec)
 {
  time (&end);
  elapsed = difftime (end, start);
  i++;
 }
 printf ("i = %d\n", i);
 sec++;
 i = 0;
}
return 0;

generator_mmf
() автор топика

man 2 alarm

anonymous
()
Ответ на: комментарий от generator_mmf

Это победа в номинации «Костыль мая на ЛОР». Ты понимаешь, что такой цикл займёт одно ядро процессора? Почему у тебя в голове не возникает стоп сигнала от такой идеи?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

такой цикл займёт одно ядро процессора

а тебе жалко что ли? за него, ведь, уплочено, вот пущщай и работает

anonymous
()
Ответ на: комментарий от crutch_master

man timer_create, timer_settime, signal

В общем можно сделать таймер и назначить обработчик для сигнала, чтобы там читалась глобальная переменная, инкрементируемая в цикле

SZT ★★★★★
()
Ответ на: комментарий от generator_mmf

А, дошло. Тебе надо узнать, сколько он насчитает за 10 сек. Хз, если честно. Alarm не точный, а если дёргать время в цикле, то это очень сильно повлияет на точность измерения. Проще просто посчитать до 100М, и замерить потраченное время. Ну вообще да, поток по идее тоже вариант. А тебе зачем всё это?

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от generator_mmf

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

В смысле «как»? Разверни мысль, возникает ощущение что ты собираешься измерять какую-то фигню.

Dudraug ★★★★★
()
Ответ на: комментарий от generator_mmf

Ты например хочешь сравнить сложение двух интов с сложением двух чаров? Ну или сложение двух интов с сложением двух флоатов? (Например на разном железе, чтоб оценить эффективность реализации арифметик проца, в научных целях) Ну так это не так делается.

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

Нужно посмотреть, до которого момента за одно и тоже время выполнятся следующие операции: инкрементирование, умножение-деление чисел с плавающей запятой, возведение в n степень-извлечение корня n-й степени. При этом сказано выводить результат через каждые несколько секунд, а после каждого вывода сбрасывать переменную в начальное состояние.

generator_mmf
() автор топика
Ответ на: комментарий от generator_mmf

Вызывая difftime каждую итерацию - ты тратишь много времени, что сильно искажает результат. Нужно делать например миллион операций в цикле между замерами difftime. Но по сути ты верно написал.

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

I-Love-Microsoft ★★★★★
()

libev тебе в щячло. Там есть таймеры.

kirk_johnson ★☆
()
Ответ на: комментарий от I-Love-Microsoft

Вызывая difftime каждую итерацию - ты тратишь много времени

Ну сама difftime то проста, может вообще быть типа такой:

#define difftime(t1,t0) (double)(t1 - t0)
То что там плавающая арифметика — не важно, ведь у ТСа будет сравнение. Если уж волноваться, то от сискола получения времени. Там действительно будет и долго и непредсказуемо.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.