LINUX.ORG.RU

шедуллер


0

0

Вот собрался писать сабж. Дошел до того что надо как то "замораживаться" (чтоб не жрать время проца). Ну к примеру sleep(но это точно не правильно) так вот вопрос : как шедуллеры "замораживаются"? ( alarm и SIGALRM что то очень сложно кажется. )

anonymous

>sleep(но это точно не правильно)

Почему??

ещё существуют usleep(), nanosleep(), pause(), sched_yield()

чего соизволите???

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

Вижу смысл только в pause(но опять же прийдется в связке с алармом делать). Остальное не пойдет т.к. к примеру я "что то" делаю и заянимает это "что то" процессорное время хоть 3 мс но если после этого сделать sleep то уже через 10 раз выполнения сдвиг во времени на секунду. Может я чего не правильно думаю? Гденить есть HOWTO-shedulle-writing или что нить околоподобное .

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

>то уже через 10 раз выполнения сдвиг во времени на секунду

А теперь тоже но по русски. Совершенно ничего не понял что ты имееш ввиду. Какой сдвиг и в каком времени???

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

Я как представляю : даны какие нибудь задания для программы, она сверяет ну пусть каждую секунду ( sleep(1) ) не пришло ли время выполнитть какое нить задание. Если пришло , то выполняет те задания и далее опять sleep(1). И так до опупения. И время выполнения задания не мгновенное проц на это же тратит время. А если я использую такую структуру : задание должно выполняться раз в 3 минуты то есть 180 секунд храниться в поле cx к примеру. И при проверке если cx != 1 то cx -- ; а если cx == 1 то выполняю и cx = 180 опять. Так вот при такой структуре время несщадно сползает на секунду другую после выполнения пары дестка задач. Поэтому я и исчу другие пути задержки времени. Как по русски обяснил?

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

Теперь более-менее обьяснил.

В твоей задаче возможен ещё такой вариант:

1)Определяем текущее время start_time=(gettimeofday()||rdtscll()); 2)выполняем задание 3)определяем время выполнения задания = (gettimeofday()||rdtscll())-starttime 4)делаем паузу длительностью в период минус время выполнения задания (cм. выше)

для упрощения жизни можешь заюзать glib. там похожий алгоритм уже реализован. тебе осталось толко подставить имя ф-и выполняющей твоё задание.

А ещё можешь заюзать таймер.

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

>А что именно есть в glib для "упрощения" моей джизни ?

main event loop & g_timeout_add()

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