1

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

备注:我用的是ucos-II。

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

/*The reste of the code*/
4

3 回答 3

2

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

static bool once = false;

if (once == false)
{
    once = true;
    // do your "once" stuff here
}
于 2015-07-29T14:48:19.700 回答
1

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

假设您有一个类似的 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.

笔记:

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

于 2015-07-29T14:48:31.060 回答
1

所以如果你只是使用

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

锁永远是真的吗?

所以你需要做

if(Lock == TRUE)
{//code to execute
 Lock = FALSE;
}
于 2015-07-29T14:54:27.980 回答