如何强制程序的一部分只运行一次

How to force a part of program to run just once?

本文关键字:一次 运行 何强制 程序 一部分      更新时间:2023-10-16

我正在编写一个需要数据库的c++程序,我正在使用SQLite。我有一个函数createTables(),它在数据库中创建表。但程序中真正困扰我的部分是,每次程序启动时,我都必须调用createTables()。尽管创建表的SQL查询是这样的:

CREATE TABLE IF NOT EXISTS table_name

但我想知道是否可以在不使用if或其他条件语句的情况下只运行一次代码的一部分我可以自己更改程序工作流吗?一个程序能改变自己吗
例如,假设原始代码为:

createTables();
otherPartOfProgram();

但对于下一次(假设在上一次运行中成功创建了表),程序改变了自己,工作流程类似于:

otherPartOfProgram();

这不能直接完成。您可以将存储在程序的外部(配置文件、注册表…)表的创建事实,或者更改createTables函数,以便在尝试创建它们之前测试它们是否存在。

不过,一种更简单的方法是将表作为运行程序的先决条件。让一些外部代码创建它们。

标准库有一个解决方案,尽管它不是为您的情况设计的:

#include <mutex>
std::once_flag flag;
void f();             // to be called once
void main_function()
{
    std::call_once(flag, f);
    // ...
}