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

时间:2013-02-21 18:10:06

标签: c++

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

CREATE TABLE IF NOT EXISTS table_name

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

createTables();
otherPartOfProgram();

但下次(假设表在上一次运行中成功创建)程序自行更改,工作流程如下:

otherPartOfProgram();

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

标准库有一个解决方案,虽然它不适合您的情况:

#include <mutex>

std::once_flag flag;
void f();             // to be called once

void main_function()
{
    std::call_once(flag, f);
    // ...
}