【问题标题】:C++ Calling function pointersC++ 调用函数指针
【发布时间】:2012-04-16 13:19:24
【问题描述】:

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

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

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

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

【问题讨论】:

  • 如果你能发布一些代码会更容易吗?但是,for 循环将在调用下一个函数之前等待每个函数完成。不过,其中一个函数可能会产生一个线程。
  • 这很可能是因为您没有使用每个 std::cout 刷新流。您是用 std::endl 还是用 "\n" 终止行?
  • 使用某种全局变量来检查它,每次调用都要检查?如果您的代码不是异步的,则不应发生此行为。
  • 我认为,你需要一个拥有 Comp Science 学位的Exorcist ;-) - 受害者似乎是 Stream,除非你的函数指针在工作队列或其他东西上发布工作,但是即使在这种情况下,函数也会快速返回。

标签: c++ callback functor ostream


【解决方案1】:

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

在这方面,通过指针的调用与命名函数的调用没有什么不同:它们都同步完成,即调用者等待函数返回。

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

【讨论】:

    【解决方案2】:

    for 循环和使用函数指针不会创建线程。拨打flush,您将看到您已排队的文字。您还可以使用调试器来跟踪正在发生的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多