Вопрос

У меня стандартная реализация перенасыщения. Функция отображения перерисовывает каждый объект, но мне нужно постоянное обновление определенных значений каждого объекта. Таким образом, единственный способ, которым я могу думать, это создать поток для обработки обновления. Тем не менее, я не могу использовать glutPostRedisplay () из другого потока, чтобы получить перенасыщение для обновления окна. Каков хороший способ иметь цикл для обновления значений наряду с циклом перенасыщения?

Кроме того, как лучше всего спать в течение нескольких секунд (вместо sleep () в течение целых секунд).

Это было полезно?

Решение

Если вам нужно какое-то регулярное обновление, вы, вероятно, захотите установить glutIdleFunc . Это функция, которая будет вызываться в цикле всякий раз, когда нет событий, поступающих для обработки. Если вы вместо этого хотите вызывать что-то через равные промежутки времени (а не как можно быстрее), вы можете попробовать glutTimerFunc , который позволяет запланировать выполнение цикла GLUT через несколько миллисекунд в будущем.

Что касается вашего второго вопроса, если вам нужно поспать несколько секунд, вы можете попробовать usleep для периодов сна с микросекундным разрешением или nanosleep , чтобы указать периоды сна в наносекундах (хотя на самом деле вы не собираетесь получать наносекундное разрешение). Я не знаю, на какой платформе вы работаете или доступны ли они в Windows, но они должны быть доступны в любой POSIX-совместимой системе (Linux, BSD, Mac OS X). Но, возможно, для ваших целей glutTimerFunc будет работать лучше.

изменить, чтобы добавить . Похоже, в Windows вам нужно будет использовать [ Sleep ] ( http://msdn.microsoft.com/en-us/library/ms686298 (VS.85% 29.aspx) (обратите внимание на заглавную S ), что занимает время в миллисекундах.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top