Если вам не приходится иметь дело с несколькими потоками, одновременно обращающимися к функции действия таймера, вы можете сделать buf
либо статической переменной в пределах области действия функции, либо файловой переменной в анонимном пространстве имен (или,если вы нереформированный программист на Си, как я, в статическую переменную файла).Затем вы убедитесь, что код не обнуляет память, пока не узнаете, что больше не хотите просматривать старые данные.
Либо:
void timer_action(void)
{
static char buf[1024];
...use buf carefully...
}
, либо:
namespace {
char buf[1024];
}
void timer_action(void)
{
...use buf carefully...
}
Если буферу больше ничего не нужно, скрытие его внутри функции минимизирует область видимости и является предпочтительным решением.
Если у вас есть несколько потоков, вы должны быть чрезвычайно осторожны, используя соответствующий потокпримитивы синхронизации, чтобы обеспечить последовательный доступ к переменной, или вам нужно сделать копию переменной для потока в локальном хранилище потока.