【问题标题】:Execute a code only one time in C在 C 中只执行一次代码
【发布时间】:2015-07-29 14:43:28
【问题描述】:

我只想执行一次代码。我使用了基于 bool 类型的全局变量的解决方案。我的问题,这是最好的解决方案吗?

备注:我用的是ucos-II。

if (TRUE == Lock)
{
 /*Code to execute one time*/
}

/*The reste of the code*/

【问题讨论】:

  • 任何代码如果不在循环、递归或多次调用的函数中,都将执行一次。
  • @EugeneSh。我认为 OP 正在考虑一个可以多次调用的函数的 part
  • 那么,我们可以澄清一下吗?无论如何,有一个指示标志是完全合法的。
  • 这是一个可怕的要求。在多线程应用程序中定义/实现会更加困难:)
  • @EugeneSh.: 这部分代码在一个函数内,每个周期都会执行(任务)。

标签: c ucos


【解决方案1】:

使用静态变量的简单代码。

static bool once = false;

if (once == false)
{
    once = true;
    // do your "once" stuff here
}

【讨论】:

  • 为什么是静态变量?
  • @StackOver,只要程序运行,静态变量就会存在。因此,您确定此代码在单线程环境中执行一次。
  • 只要程序运行,全局变量也会存在吗?
  • 精确但静态的变量可以限定为函数。
【解决方案2】:

所以如果你只是使用

if (TRUE == Lock)
{
 /*Code to execute one time*/``
}

锁定永远是真的吗?

所以你需要这样做

if(Lock == TRUE)
{//code to execute
 Lock = FALSE;
}

【讨论】:

    【解决方案3】:

    取决于您要执行此检查的时间和地点。

    假设你有一个类似的 API

    void func(bool flag)
    {
       if(flag)
       {
          // Code for only one condition
       }
       else
       {
         //Rest of the code
       }
    }
    

    然后只需传递 TRUE 或 FALSE,您就可以确保所需的代码只执行一次。

    否则,您使用全局变量的方法也可以,但是一旦执行所需的块,您必须取消设置 LOCK

    if( LOCK == TRUE)
    {
       //Execute code
       LOCK = FALSE;
    }
    

    希望你有一个全局变量LOCK 初始化为1

    注意:

    如果您使用的是平面内存系统,那么拥有它总是很危险 全局变量,所以我们倾向于避免它。如果真的有需要的话 是的,我们选择全局变量,否则我们可以按照建议使用一些标志 在我的第一种方法中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2014-07-27
      • 2017-09-27
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多