glutPostRedisplay en un hilo diferente
-
05-07-2019 - |
Pregunta
Tengo una implementación estándar de saturación. La función de visualización redibuja cada objeto, pero necesito una actualización constante de ciertos valores de cada objeto. Tal como está, la única forma en que puedo pensar hacer esto es generar un hilo para manejar la actualización. Sin embargo, no puedo usar glutPostRedisplay () de un hilo diferente para obtener glut para actualizar la ventana. ¿Cuál es una buena manera de tener un bucle para actualizar valores junto con el bucle de saturación?
Además, ¿cuál es la mejor manera de dormir durante fracciones de segundos (en lugar de dormir () durante segundos completos)?
Solución
Si necesita algún tipo de actualización regular, probablemente desee configurar un glutIdleFunc
. Esta es una función que se activará en un bucle siempre que no haya eventos que se procesen. Si, en cambio, desea llamar a algo a intervalos regulares (a diferencia de lo más rápido posible), puede intentar glutTimerFunc
que le permite programar algo para que se ejecute en el bucle de GLUT un cierto número de milisegundos en el futuro.
En cuanto a su segunda pregunta, si necesita dormir por fracciones de segundos, puede intentar usleep
para períodos de espera de resolución de microsegundos, o nanosleep
para especificar los períodos de sueño en nanosegundos (aunque en realidad no obtendrás una resolución de nanosegundos). No sé en qué plataforma está o si están disponibles en Windows, pero deberían estar disponibles en cualquier sistema compatible con POSIX (Linux, BSD, Mac OS X). Pero quizás para sus propósitos glutTimerFunc
funcionará mejor.
editar para agregar : parece que en Windows necesitarías usar [ Sleep
] ( http://msdn.microsoft.com/en-us/library/ms686298 (VS.85% 29.aspx) (tenga en cuenta el S
mayúscula), que lleva un tiempo en milisegundos.