LINUX.ORG.RU

Таймер на Си\Си++


0

0

Здравствуйте!! Ребят, я так пораздумывал - если проц имеет возможность щелкать на 1GHz то что ему стоит клоцать на 8000, не так ли? Когда я делаю простой цикл for..next, или while там, то они грузят проц на все 100, но мне не нужна вся его производительность а всего лишь отрисовка в буфер 8-ми битного байта (ну или 16-ти..) с частотой 8000 штук в секунду.. Когда делаю вложенные циклы - это, ессно грузит проц на всю мощь.. А если бы проц выкидывал по восемь бит на известную частоту в секунду - он бы, я так понимаю грузился бы всего на доли процентов, да? Вы не знаете как "попростить" проц помочь в таком деле? Есть какие-то сишные функции или как это сделать? Я еще слабенько в си, так что не ругайтесь сильно уж.. Пасиба!!

Ответ на: комментарий от FemtoCat

в низу мана есть упоминание getitimer и setitimer
man их тоже

dimon555 ★★★★★
()

Переключение контекста задачи достаточно затратная операция. Не то чтобы уж совсем много времени сожрет, но, ИМХО, 8 кГц достаточно часто. И всякие другие задачи работают. В общем, не знаю, получится ли точно 8000 раз в секунду из пользовательской программы. Насколько критична частота?

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

Ребят, я вообще хотел научится таймить некоторые промежутки во времени, в общем.. Ну вот предположим - генерация звука наверное происходит не при помощи процессора, да? Я хотел отправлять звуковые семплы на считывание с определенной частотой для того чтобы этим процессом можно было всесторонне управлять.. Так же хотел и с графикой побалываться - "повременить" всячески.. При этом проц шоп не очень страдал.. Вообще всячески точно регулировать процессы в реал-тайме хочу.. Вообще, я предполагал что такие частоты не очень-то в груз процу с почти гиговым щелканьем.. Ну правда - да, куча процессов плюс еще же есть такое понятие как циклы - если операция выполняется за четыре цикла то и частота уже будет не гиг а 250МГц)) Ну а что - вообще нельзя управлять нормально временем, что ли? То платформозависимое, то процами не всеми поддерживается.. Кароче - как это вообще все происходит, ребят??))

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

А если серьёзно – да, "you never can know" сколько по времени займёт та или иная операция, т. к. в самый неподходящий момент резко может начаться своп или ещё какая фигня, которая отберёт кучу процессорного времени и твои 42 нс превратятся в 42 мин.

trapezoid
()
Ответ на: комментарий от AZiCoDec

> http://linux.die.net/man/2/setitimer

Видимо, как-то так:
1. Сделал что-то
2. Ставишь таймер
3. Спишь до прихода SIGALRM
4. Проснулся, чтото-то сделал опять
5. goto 2

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

В системе есть частота тикания системного таймера, раньше 100 Гц, сейчас 1000 Гц, функции времени setitimer() или nanosleep() хорошо работают, когда требуемый от них интервал времени больше интервала системного таймера в несколько раз. Иначе они работают не совсем четко. Если порыться в инете, можно найти багрепорты и патчи на эту тему, а можете просто поэкспериментировать и написать программу, которая в цикле делает заданную паузу и потом вызвает gettimeofday() и убедится в этом (только не делайте вывод значений на экран, а заполняйте массив и потом выводите подряд).

Для "борьбы" с другими задачами вашему программе должне помощь приоритет реального времени "man setpriority()", но с ним надо работать осторожно.

Но если вы собрались выводить звук через COVOX, то это уже нужно в ядро, там не так сложно создавать четкие временные интервалы, а в user-space это не нужно. Как вам уже сказали, например, есть своп. И в принципе любая страница памяти вашей программы может оказаться там. То есть, допустим вы вывели один семпл звука, сделали паузу в 1/8000 с (и причем ядро точно выдержало запрашиваемую вами паузу), но когда ваша программа решила вывести следущий семпл, то он оказался в свопе... Поэтому драйвер в ядро, у драйвера есть буфер, который гарантированно не будет в свопе и т.д.

Ну, а видео, не думаю, что вам там поребуется 1/8000 с, а 1/100 выдерживается с достаточно малой погрешностью.

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