我在代码中为系统中的一个进程使用了三个计数器 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();
}
}
最佳答案
这方面仍有很大的改进空间,但这个答案专门用于最大限度地减少代码重复。
话虽如此,您可以使用数组:
/*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];
关于c - 优化 C 中计数器的一段幼稚代码。需要更好的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104347/