glutTimerFunc() 实际上做了什么?

What does glutTimerFunc() actually do?

如果我 运行 以下循环作为我的 OpenGL 程序的一部分:

void Loop(int state)
{
    glutPostRedisplay();
    glutTimerFunc(1, Loop, 0);
}

然后,我的程序 运行 没问题,我可以通过拖动鼠标在场景中移动相机。

但是,如果我使用这个循环:

void Loop(int state)
{
    glutPostRedisplay();
    Loop();
}

我无法使用鼠标在场景中四处移动。正在调用循环,但它只是不处理任何鼠标或键盘输入。

我不明白这是为什么。唯一的区别是,在第一个示例中,使用定时器函数调用 Loop(),而在第二个示例中,Loop() 被显式调用,没有任何延迟。

那么 glutTimerFunc() 除了调用 Loop() 之外实际上在做什么?

在第一个示例中,glutTimerFunc 确保 Loop 在 1 毫秒后调用,但是 returns 和 不会等待 ,这意味着Loop 在这种情况下 returns 几乎立即。

在第二个示例中,Loop 正在调用自身,这会导致无限递归并锁定程序的主线程,这可以解释为什么在这种情况下没有任何效果。 Loop,那么,永远不会returns。如果您离开程序 运行ning 足够长的时间,您的系统将由于无限递归 运行 内存不足。