我有一个应用程序,其中有几个功能。每个函数可以根据用户输入多次调用。但是,我只需要在一个函数中执行一小段代码,最初是在启动应用程序时。当稍后再次调用相同的函数时,不得执行这段特定的代码。代码在 VC++ 中。请告诉我处理此问题的最有效方法。
原文由 Darzen 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个应用程序,其中有几个功能。每个函数可以根据用户输入多次调用。但是,我只需要在一个函数中执行一小段代码,最初是在启动应用程序时。当稍后再次调用相同的函数时,不得执行这段特定的代码。代码在 VC++ 中。请告诉我处理此问题的最有效方法。
原文由 Darzen 发布,翻译遵循 CC BY-SA 4.0 许可协议
充分尊重 std::call_once()
以及关于线程安全的常见警告,这是另一个轻量级选项,它可以避免未使用的变量警告并将我们的标志保持在块范围内:
for (static bool once=true; once; once=false) {
yourCodeHere();
}
原文由 James Ward 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
使用带有构造函数的全局静态对象(在
main
之前调用)?或者只是在例行程序中很少有这样的速度不够快的情况!
附加物
在多线程上下文中,这可能还不够:
您可能还对 GCC 的 pthread_once 或
constructor
函数__attribute__
感兴趣。使用 C++11,您可能需要 std::call_once 。
如果您的函数可以从多个线程调用,您可能想要使用
<atomic>
并可能声明static volatile std::atomic_bool initialized;
(但您需要小心)。但是这些可能在您的系统上不可用;它们在 Linux 上可用!