Глобальные переменные в C ++ - PullRequest
       1

Глобальные переменные в C ++

0 голосов
/ 30 сентября 2010

Я работаю с некоторым кодом C ++, который имеет таймер, и таймер запускает это:

char buf[1024];
ZeroMemory(&buf, sizeof(buf));
somefunction(buf); // this put stuff into buf
otherfunction(buf); // this do stuff with buf

somefunction () выполняет веб-запрос, а InternetReadFile () помещает данные в «buf»

Но мне нужно иметь возможность прочитать предыдущий буф при следующем запуске таймера. Как я могу сохранить buf в глобальном var и переназначить его или сделать «buf» равным ранее сохраненному значению при необходимости?

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Если вам не приходится иметь дело с несколькими потоками, одновременно обращающимися к функции действия таймера, вы можете сделать buf либо статической переменной в пределах области действия функции, либо файловой переменной в анонимном пространстве имен (или,если вы нереформированный программист на Си, как я, в статическую переменную файла).Затем вы убедитесь, что код не обнуляет память, пока не узнаете, что больше не хотите просматривать старые данные.

Либо:

void timer_action(void)
{
    static char buf[1024];
    ...use buf carefully...
}

, либо:

namespace {
char buf[1024];
}

void timer_action(void)
{
    ...use buf carefully...
}

Если буферу больше ничего не нужно, скрытие его внутри функции минимизирует область видимости и является предпочтительным решением.

Если у вас есть несколько потоков, вы должны быть чрезвычайно осторожны, используя соответствующий потокпримитивы синхронизации, чтобы обеспечить последовательный доступ к переменной, или вам нужно сделать копию переменной для потока в локальном хранилище потока.

0 голосов
/ 30 сентября 2010

Что-то не так, если вам нужны старые данные RAW?Вместо этого извлеките интересующие вас фрагменты из текущего буфера RAW и сохраните их как переменные-члены в вашем классе.Для следующего чтения, соответствующее состояние доступно.Шаблон проектирования состояния также может быть полезен здесь, если ваш код посвящен переходам между состояниями.

Это поможет вам избежать проблем, связанных со статическими переменными, как @Jonathan указал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...