如何只执行一次代码?

新手上路,请多包涵

我有一个应用程序,其中有几个功能。每个函数可以根据用户输入多次调用。但是,我只需要在一个函数中执行一小段代码,最初是在启动应用程序时。当稍后再次调用相同的函数时,不得执行这段特定的代码。代码在 VC++ 中。请告诉我处理此问题的最有效方法。

原文由 Darzen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
2 个回答

使用带有构造函数的全局静态对象(在 main 之前调用)?或者只是在例行程序中

static bool initialized;
if (!initialized) {
   initialized = true;
   // do the initialization part
}

很少有这样的速度不够快的情况!


附加物

在多线程上下文中,这可能还不够:

您可能还对 GCC 的 pthread_onceconstructor 函数 __attribute__ 感兴趣

使用 C++11,您可能需要 std::call_once

如果您的函数可以从多个线程调用,您可能想要使用 <atomic> 并可能声明 static volatile std::atomic_bool initialized; (但您需要小心)。

但是这些可能在您的系统上不可用;它们在 Linux 上可用!

原文由 Basile Starynkevitch 发布,翻译遵循 CC BY-SA 3.0 许可协议

充分尊重 std::call_once() 以及关于线程安全的常见警告,这是另一个轻量级选项,它可以避免未使用的变量警告并将我们的标志保持在块范围内:

 for (static bool once=true; once; once=false) {
    yourCodeHere();
}

原文由 James Ward 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题