我想出了一种仅在每10、20、30 ... 100、200、300 ...,1000、2000上触发的方法,但是我想看看是否有更好的方法可以执行此操作。

unsigned long fails = 0;

while (true) {
    if (!checkSomething()) {
        fails++;
        unsigned long backoff = exp10(((unsigned long) log10(fails)));
        if (fails % backoff == 0)
            logError("...");
    }
}

最佳答案

似乎合理。另一种方法是将日志放入存储器中的某个位置,然后在计时器上进行重复数据删除。例如,每十秒钟您可以计算每条消息的出现次数并全部记录下来。这克服了您的方法存在的一个问题,即如果事件发生10次,然后经过5个小时,那么此后每小时发生一次,则不会再出现10个小时。时不时地“刷新缓冲区”日志消息是很好的,这样您就不会失去操作意识。

10-08 12:28