1

我有一个标准的过剩实施。显示函数重绘每个对象,但我需要不断更新每个对象的某些值。事实上,我能想到的唯一方法是产生一个线程来处理更新。但是,我不能使用来自不同线程的 glutPostRedisplay() 来获得 glut 来刷新窗口。有一个循环来更新 glut 循环旁边的值的好方法是什么?

另外,睡几秒钟的最佳方法是什么(而不是整秒钟的 sleep() )。

4

1 回答 1

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),其中需要以毫秒为单位的时间。

于 2009-10-23T02:50:20.723 回答