glutPostRedisplay в другой теме
-
05-07-2019 - |
Вопрос
У меня стандартная реализация перенасыщения. Функция отображения перерисовывает каждый объект, но мне нужно постоянное обновление определенных значений каждого объекта. Таким образом, единственный способ, которым я могу думать, это создать поток для обработки обновления. Тем не менее, я не могу использовать 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
), что занимает время в миллисекундах.