QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1749|回复: 16

一个简单的编程问题!

[复制链接]
发表于 2005-6-29 10:29:08 | 显示全部楼层 |阅读模式
我现在有一个简单的编程问题想请教各位大侠,不要笑话我呀!
怎么样可以在一个project中的各个文件中引用同一个变量,但要求是,在程序运行的过程中,变量的值会改变,而其他引用这个变量的函数能及时发现,并随之改变.看起来好象是一个很基础的问题,可是,我就是这么菜,唉!郁闷ing!拜托各位了!~>_<~

ps:不同的文件有可能是不同的进程函数
发表于 2005-6-29 13:15:25 | 显示全部楼层
搞一个全局变量不就行了。

在class1.h文件中

int globalIntVar;

class Class1{
};


这样只要你include了class1.h 就可以看到这个变量globalIntVar了,也可以更改这个变量。

或者你专门写一个叫globals.h 的文件来放这些全局变量, 这样好维护你全局变量列表,
当然全局变量不要太多。
#ifndef GLOBALS_H
static int val1 = 1;
static int val2 = 2;
static char val3 = 'a';
....
#endif

在用到的地方把 globals.h 给 include进来就可以了。
回复

使用道具 举报

 楼主| 发表于 2005-6-29 19:14:25 | 显示全部楼层
我试了,不行呀,如果我在程序运行过程中修改了父进程的变量,子进程是没有办法监测到的呀!5555555555有没有其他办法呀!
回复

使用道具 举报

发表于 2005-6-29 20:22:12 | 显示全部楼层
I think it's necessary to send messages if the value is changed.
The process which is concern about the status of the value needs to receive the message.
回复

使用道具 举报

发表于 2005-6-29 20:59:32 | 显示全部楼层
同意楼上,变量改变的时候触发一个消息
其他需要监视变量的,对此消息进行相应就可以了
回复

使用道具 举报

发表于 2005-6-30 09:16:41 | 显示全部楼层
你的描述很不清楚啊,你是想说

A进程和B进程共享某个变量的值?
那就用共享内存吧

A进程改变了某个值,B进程针对值的改变要完成某些特定的动作?
发送信号+共享内存
回复

使用道具 举报

 楼主| 发表于 2005-6-30 09:29:07 | 显示全部楼层
我也想过要用信号的,可是,问题的关键是,这个变量值只改变一次,就是说发送一次信号,可是,在子进程中,是一个循环,就是说每做一次循环,子进程就去判断一下,如果用信号,那就是说,在每一次循环中,它都要等待一个信号,这样就不匹配了(发送一次,接受却是很多次)怎么办?所以我就放弃用信号了!我决定用管道,在主进程中写进一些DD,然后子进程中去判断buffer里是否有DD(不用读出来),但,问题是,我是在子进程运行了一段时间才往管道里写DD,可是,子进程就判断不出来了,我想是因为2个进程各自有各自的资源,所以,互不影响!唉!现在有点没有办法了!
回复

使用道具 举报

发表于 2005-6-30 12:19:09 | 显示全部楼层
如果变量值只改变一次, 那再放个全局bool型变量,默认为false, 你改变那个变量的时候同时
改变这个bool的标志为true。 你在子进程中,判断这个标志就可以了。一旦发现改变就计算出新的值,然后置成false。

或者全局的搞成一个struct, 里面有值,有标志。
回复

使用道具 举报

 楼主| 发表于 2005-6-30 13:32:33 | 显示全部楼层
不对呀,如果还是设置全局型变量,可以前的就没有差别了,因为,我一旦分了父子进程之后,系统资源不是有复制吗,所以,以后父进程里有的改变,子进程是没有办法监测出来的呀,主要就是这个,子进程是运行了一段时间,我才改变父进程的变量值的呀!
回复

使用道具 举报

发表于 2005-6-30 13:42:46 | 显示全部楼层
我没有说,让你子进程改变父进程得变量。 子进程改变的是全局变量。 父进程根据全局变量是否改动来决定是否改变自己的变量。这个比较容易实现。

Hope this could help.
回复

使用道具 举报

 楼主| 发表于 2005-6-30 14:15:05 | 显示全部楼层
反了,呵呵,是父进程要改变的是全局变量。 子进程根据全局变量是否改动来决定是否改变自己的变量。
你觉得这个可以做到吗?可是我现在已经定义了一个全局变量,初始值为0,在整个程序运行了一段时间之后,父进程中的改变了它的值为1,然后子进程却一直都判断它为0,我不知道是不是我的定义有问题,我定义个int a在父进程所在的文件的开始处,然后在子进程所在的文件的开头定义extern int a,这样对不对呀?
回复

使用道具 举报

发表于 2005-6-30 14:39:02 | 显示全部楼层
[quote:7f3ad857f0="zt_apple"]反了,呵呵,是父进程要改变的是全局变量。 子进程根据全局变量是否改动来决定是否改变自己的变量。
你觉得这个可以做到吗?可是我现在已经定义了一个全局变量,初始值为0,在整个程序运行了一段时间之后,父进程中的改变了它的值为1,然后子进程却一直都判断它为0,我不知道是不是我的定义有问题,我定义个int a在父进程所在的文件的开始处,然后在子进程所在的文件的开头定义extern int a,这样对不对呀?[/quote]

跨进程的话要用共享内存。

基本概念啊。
回复

使用道具 举报

发表于 2005-6-30 14:58:40 | 显示全部楼层
其实楼主要想的问题是:变量为什么变了 谁变了它 然后考虑谁去怎么知道它变了
回复

使用道具 举报

 楼主| 发表于 2005-6-30 15:56:49 | 显示全部楼层
[quote:8c9b9b9ad2="wsm"]其实楼主要想的问题是:变量为什么变了 谁变了它 然后考虑谁去怎么知道它变了[/quote]

最后一句说到重点了,我想知道怎么能在子进程中检查到它变了,呵呵!!!
回复

使用道具 举报

发表于 2005-6-30 16:42:38 | 显示全部楼层
你想到了前一句 就会想到: 谁改动了它 谁就有责任通知别人这个地方被我修改了 通知的方法 无非是消息信号等等...... 所以不必在这个变量怎么放上下功夫 而是谁会来修改它
(附带:一般来说 有超过两个模块需要“修改”一个变量 就该考虑代码结构问题了)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 19:44 , Processed in 0.053028 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表