glutPostRedisplay在另一个线程中

时间:2009-10-23 02:21:14

标签: c multithreading loops glut freeglut

我有一个标准的过剩实施。显示函数重绘每个对象,但我需要对每个对象的某些值进行持续更新。实际上,我能想到的唯一方法是生成一个线程来处理更新。但是,我不能使用来自不同线程的glutPostRedisplay()来刷新窗口。有一个循环来更新值以及过剩循环的好方法吗?

此外,最好的睡眠方式是几秒钟(而不是整个秒钟的睡眠时间)。

1 个答案:

答案 0 :(得分:2)

如果您需要某种定期更新,可能需要设置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),以毫秒为单位的时间。