请教一个关于全局变量使用的问题
各位好,问题如下
最近做了一个常驻程序,初衷是:用一个全局变量控制程序大循环,初始值是1(循环继续),当收到SIGTERM信号的时候,在绑定的回调函数里将全局变量的值改成0,使程序大循环结束,常驻程序终了。
注:1,全局变量定义在大循环所在的文件(loop.h)里:static volatile sig_atomic_t g_loop_flg = 1;
2,信号回调函数所在文件(main.cpp)包含大循环所在文件,即包含了全局变量
现在问题是:当收到SIGTERM信号的时候,在回调函数里确实将全局变量变成0了(将全局变量打印到屏幕),但在大循环处判断全局变量的值的时候,始终还是1(值没变),不知道是为什么,请各位大侠指教,谢谢。
PS.volatile关键字已经加了
[解决办法]
static volatile sig_atomic_t g_loop_flg = 1;
你保证你在回调函数里设置的全局变量和大循环处的全局变量是一个变量吗?去掉全局变量定义时的static试试
[解决办法]
那个 static 就是让每个 .c 文件对应的编译单元都得到一份单独的副本了。
[解决办法]
全局变量绝大部分情况下,不要用static修饰
[解决办法]
如果想把那个变量放在某个类里面,以达到同样的效果,那么它就通常需要用static去修饰。
[解决办法]