为C中的计数器优化一段天真的代码需要一个更好的解决方案

时间:2013-11-20 18:46:19

标签: c

我在我的代码中使用了三个计数器c1,c2和c3,用于系统中的一个进程。在某些点我需要触发每个计数器并在特定点结束它(targetc1,targetc2,targetc3)。因此,我使用三个标志cf1,cf2和cf3来检查计数器标志是否在我的进程被触发时设置为ON,然后检查计数器目标是否到达终点。有没有更好的方法来做而不是使用三个标志?我将来可能需要在我的代码中使用更多的计数器,但它不应超过我认为的6个计数器。 下面给出了p1流程的代码片段来解释我的问题。

/*P1 process variables*/
static int c1,c2,c3;
static int targetc1,targetc2,targetc3;
static int cf1,cf2,cf3;

p1startingfunction()
{
    int a;
    if(cf1 == 1)
    {
    c1++;
    if(c1==targetc1)
        /*counter reached do something*/
        c1trigger();
    }
    if(cf2 == 1)
    {
    c2++;
    if(c2==targetc2)
        /*counter reached do something*/
        c2trigger();
    }
   if(cf3 == 1)
    {
    c3++;
    if(c3==targetc3)
        /*counter reached do something*/
        c3trigger();
    }
}

1 个答案:

答案 0 :(得分:1)

这方面仍有很大的改进空间,但这个答案专门用于减少代码重复。

话虽如此,你可以使用数组:

/*P1 process variables*/
static int c[3];
static int targetc[3];
static int cf[3];
static void (*ctrigger[3])(void);

p1startingfunction()
{
    int a, i;
    for (i = 0; i < 3; i++) {
        if (cf[i] == 1) {
            c[i]++;
            if (c[i] == targetc[i]) {

                /* counter reached do something */
                ctrigger[i]();                    
            }
        }
    } 
}

或者你可以使用类似于:

的结构
struct counter {
    int c;
    int target;
    int f;
    void (*trigger)(void);
};

然后创建一个结构数组。

struct counter counters[3];