C ++中的全局变量

时间:2010-09-30 02:50:33

标签: c++ visual-studio-2010 global-variables

我正在使用一些带有计时器的C ++代码,计时器运行它:

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

somefunction()执行Web请求,InternetReadFile()将数据放入“buf”

但是我需要能够在下次执行定时器时读取前一个buf。如何在全局变量中存储buf并重新分配它,或者在必要时使“buf”等于先前存储的值?

2 个答案:

答案 0 :(得分:1)

如果您不必同时处理多个线程访问计时器操作函数,您可以将buf放入函数范围内的静态变量或匿名命名空间中的文件变量(或者,如果你是一个像我这样的未经过改造的C程序员,进入一个文件静态变量)。然后,在确定您不想再查看旧数据之前,请确保代码不会使内存归零。

或者:

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

或者:

namespace {
char buf[1024];
}

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

如果没有其他东西需要缓冲区,将其隐藏在函数内会使范围最小化并且是首选解决方案。

如果涉及多个线程,则必须非常小心,使用适当的线程同步原语来确保对变量的顺序访问,或者必须在线程本地存储中创建变量的每个线程副本。 / p>

答案 1 :(得分:0)

如果您需要旧的RAW数据,是不是有问题?而是从当前RAW缓冲区中提取感兴趣的片段,并将其作为成员变量存储在您的类中。对于下一次读取,可以使用相关状态。如果您的代码是关于状态转换的话,状态设计模式在这里也会有所帮助。

这将帮助您避免与@Jonathan指出的静态变量相关的问题