0

最近引起我注意的是,在游戏更新循环中,函数不会在另一个更新循环之前完全运行。例如:

void update()
{
function 1;
function 2;
}

在函数 1 或函数 2 完全运行之前,将调用另一个更新循环。是这样吗?因为我一直认为在函数结束之前它不会再次循环。因为我从来没有被教过这个,直到最近也从来没有查过这个,所以我从来没有考虑过这个。我觉得这很奇怪,因为现在看来,如果我想在每一帧上运行一段代码,我必须逐字地将代码放入更新循环中。例如

void update()
{
int i = 0;
int j - 0;
etc //the contents of function a
}

我的问题是,这肯定会停止多态性和封装吗?以我将创建一个函数而不是重复一段代码的方式。

我是正确的,如果是这样,为什么?

4

1 回答 1

1

正如评论的那样,我不确定您使用的编程语言。

  1. 但是,您正在处理re-entrant/non-re-entrant的情况。当发出信号时,当前流将被“保留”,并且将调用对信号的操作(将其读取为中断)。如果信号的动作是调用同一个函数(在你的情况下是更新函数),那么你可以有 - 保持并在同一个线程中再次调用的效果。

  2. 另一种可能性是如果您的系统是多线程的。然后可以保留当前线程执行路径,并且可以调用任何其他线程执行。这又可以再次调用更新函数。

这两个是非常著名的基本计算机科学概念,被称为函数的可重入性和线程安全性。这本书 (APIU)个人而言是一本了不起的书 - 尝试获取它的副本。

于 2013-04-22T13:32:44.287 回答