LINUX.ORG.RU

развлекашки с glut

 , , вечерные развлекашки


0

1

такой вот вопрос: как сделать чтобы каждые n-милисекунд запускалась функция, при этом бы glut ловил клавиши и прочие ивенты? есть красивое решение?

спасибо =)



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

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

Я обычно делаю как-то так (псевдокод):

int delay = 100500; // Желаемый период вызова функции

for(;;)
{
   int t1 = getTime();
   doYourStuff();
   int frametime = getTime() - t1;
   sleep(delay - frametime);
}

Брат вроде жив пока.

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

при этом бы glut ловил клавиши и прочие ивенты

а теперь посмотри будет ли он ловить.

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

А что, glut не ловит ивенты во время sleep? Ну плохо, что. Вот в SDL есть очередь сообщений, с которой можно работать примерно так.

imtw
()

В glut есть функция, получающая события без блокировки потока? Вот её используй в бесконечном цикле

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

Что значит рекурсивно? Поставь обработчик и в нем переставляй его же. Тут никакой рекурсии нет. Единственный правильный способ.

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

без блокировки потока

я глупый, и не очень понял что это значит =)

Но глут в бесконечном цикле не ловит события.. эхх.. SDL стоит попробовать?

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

Либо создавай отдельный поток, вызывай в нём свою функцию и sleep. Happy debugging.

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

Из функции blabla ты вызываешь функцию glutTimerFunc. Нет, это не рекурсия. Рекурсия это если бы ты вызывал blabla из blabla или если бы ты был создателем glut и вызывал бы glutTimerFunc из glutTimerFunc. Еще это была бы косвенная рекурсия, если бы функция glutTimerFunc вызывала бы функцию, переданную ей в качестве аргумента, но этого так же не происходит.

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

рекурсия же, нет?

Нет, это не рекурсия. Это событие таймера.
И да, это правильное решение при использовании glut.

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

ну смотри, я выполняю эту функцию и она заканчивается тогда, когда таймер вызывает функцию и она оканчивается. нет?

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

glutTimerFunc регистрирует указатель на переданную функцию в списке таймеров и сразу возвращает управление тому, кто его вызвал.

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

ну смотри, я выполняю эту функцию и она заканчивается тогда, когда таймер вызывает функцию и она оканчивается. нет?

Просто почитайте, что такое рекурсия.

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