glutPostRedisplay在另一个线程中
-
05-07-2019 - |
题
我有一个标准的过剩实施。显示函数重绘每个对象,但我需要对每个对象的某些值进行持续更新。实际上,我能想到的唯一方法是生成一个线程来处理更新。但是,我不能使用来自不同线程的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
),这需要花费一些时间(毫秒)。
不隶属于 StackOverflow