2012-04-02 163 views
0

我有一个回调函数系统来组织我的引擎的初始化和运行时进程。我有一个类管理所有这些函数指针,它们存储在STL向量容器中。它们通过类似(* iterator) - > execute()的包装类来调用。C++调用函数指针

当我调用这些指针时,我在for循环中执行它。所以如果我有20个函数指针被注册,它将会遍历所有20个函数指针,并找到匹配的类型并通过包装类调用函数。

我的问题是,当指针函数被调用时,循环是否等待该函数结束其执行,然后继续循环或循环继续在第一个函数运行时继续调用函数?请注意,这一切都发生在同一个线程上。

我做了一些测试,似乎循环不会暂停执行其他功能。这似乎是某种伪线程? ......这看起来不正确。但是,结果可能不正确,因为我使用std :: cout将结果打印到控制台,所以我不知道是否由于某些不知道的ostream功能而发生这种情况。

+0

如果你可以发布一些代码会更容易吗?但是,for循环会在调用下一个函数之前等待每个函数完成。其中一个功能可能会产生一个线程。 – hmjd 2012-04-02 21:16:40

+0

很可能这是因为你没有用每个std :: cout刷新流。你是用std :: endl还是用“\ n”来终止行? – 2012-04-02 21:17:39

+0

使用您为每次调用检查的某种全局变量检查它?如果你的代码不是异步的,这种行为不应该发生。 – chikuba 2012-04-02 21:19:48

回答

2

当指针函数被调用时,循环是否等待该函数结束其执行,然后继续循环或循环继续在第一个函数运行时继续调用函数?

在这方面,通过指针调用不是来自一个名为函数的调用不同的:他们既要完成同步,即主叫等待函数返回。

最有可能的原因是与控制台缓冲信息有关,这可能会导致显示延迟显示的内容。

2

for循环和使用函数指针不会创建线程。致电flush,您将看到您排队的文字。你也可以使用调试器来跟踪发生了什么。