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

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

有帮助吗?

解决方案

如果您需要某种定期更新,您可能需要设置 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