| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3802 人关注过本帖
标题:发两个程序,以视今天下午的学习成果,如果你也是初学者,一起加油!!!
只看楼主 加入收藏
马也
Rank: 1
等 级:新手上路
帖 子:31
专家分:7
注 册:2012-1-24
收藏
得分:0 
以下是引用TonyDeng在2012-8-9 13:35:53的发言:

程序运行的结果是没有变化的,不同在于程序结束后向操作系统传递了什么信息。要想到不同的返回值,应该在.bat文件中获取errorlevel环境值,这个值就是你的程序的返回值。一般的用法,是在.bat文件中根据刚才运行的程序的结果决定后续程序如何运行,用于调度整个解决方案的。那是旧式操作系统调度程序的方式,在当今Windows下,程序已经不是那样运作的了,所有程序的一切动作都掌握在Windows手中,包括某个函数什么时候运行,都不是程序说了算,而是Windows说了算,所以这种调度方法已经过时,现在都是使用API直接与操作系统沟通调度进程或线程,无需再在程序结束之后再做什么,你可以随时随地启动和终结需要的模块。这就是现在无需再把main()的return 0看得那么重要的原因。


额。。。。就是说我在输出结果中是看不到返回值得,要在其他文件中查看。其他的不懂~有机会我会仔细研究~谢谢~
2012-08-09 13:44
马也
Rank: 1
等 级:新手上路
帖 子:31
专家分:7
注 册:2012-1-24
收藏
得分:0 
以下是引用Alar30在2012-8-9 13:36:04的发言:

小型程序这么写没事
大型程序这么写的话
代码维护很麻烦的
自己都看糊涂


木有写过程序,木有做过代码维护,望理解初学者的能力范围~我会慢慢学习~
2012-08-09 13:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用pangding在2012-8-9 13:44:54的发言:

如果不靠返回值的话,在 windows 下,一般怎么指示一个进程的退出状态呢?

Windows的进程可以直接启动别的进程,它不需要退出之后再来做,启动需要的进程再退出也是一样的。只有一个例外,是你需要用调试器调试程序的时候,就会用到程序结束后的留下的信息,正常使用中,是不需要那样的。Windows管理下的进程,总是正常退出,程序一结束,系统就回收资源,没有什么东西可以留下,也不应该留下。那种没有自动回收资源机制的系统(如DOS)就有必要使用那种机制。

授人以渔,不授人以鱼。
2012-08-09 13:51
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用TonyDeng在2012-8-9 13:51:46的发言:


Windows的进程可以直接启动别的进程,它不需要退出之后再来做,启动需要的进程再退出也是一样的。只有一个例外,是你需要用调试器调试程序的时候,就会用到程序结束后的留下的信息,正常使用中,是不需要那样的。Windows管理下的进程,总是正常退出,程序一结束,系统就回收资源,没有什么东西可以留下,也不应该留下。那种没有自动回收资源机制的系统(如DOS)就有必要使用那种机制。

不见得哦 比如进程的内核对象引用计数不为0 就不释放


[ 本帖最后由 zklhp 于 2012-8-9 13:58 编辑 ]
2012-08-09 13:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
用它自己管理的引用调用机制,就能保证结束时计数为0,你每引用一个内核对象,Windows都会自动记录在案,容不得你逃,因为不是你管的,是它管的。两个不同的进程引用同一内核对象,其中一个结束,另一个仍在使用,当然不会释放仍在使用的资源,但结束的那个进程自己的数据,是被清掉的。

授人以渔,不授人以鱼。
2012-08-09 14:02
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
以下是引用TonyDeng在2012-8-9 13:51:46的发言:

Windows的进程可以直接启动别的进程,它不需要退出之后再来做,启动需要的进程再退出也是一样的。只有一个例外,是你需要用调试器调试程序的时候,就会用到程序结束后的留下的信息,正常使用中,是不需要那样的。Windows管理下的进程,总是正常退出,程序一结束,系统就回收资源,没有什么东西可以留下,也不应该留下。那种没有自动回收资源机制的系统(如DOS)就有必要使用那种机制。


是,任何现代化操作系统都有这能力。但一个父进程还是应该有能力观察子进程的状态吧。比如我想编译执行代码,得先编译,至少得没语法错误再去链接吧。如何获得编译是否成功这个结论呢?
2012-08-09 14:05
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
不要纠结这个问题了 只要知道 int main()是好的 void main() 是不好的 就可以了 虽然不好的也可以用 而且对运行也没啥影响 但总是不好的 我们要做一个好人 用好的写法
2012-08-09 14:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
编译成功就自己启动链接器咯,编译是否成功自己不知道?

授人以渔,不授人以鱼。
2012-08-09 14:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用zklhp在2012-8-9 14:08:05的发言:

不要纠结这个问题了 只要知道 int main()是好的 void main() 是不好的 就可以了 虽然不好的也可以用 而且对运行也没啥影响 但总是不好的 我们要做一个好人 用好的写法

哈哈,那也是,如果你喜欢在不同的编译器之间来回跳,是应该采用最常用的方法。

授人以渔,不授人以鱼。
2012-08-09 14:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
利用.bat这样的脚本调度各个进程的进行,其实不过是在各个程序的上面覆盖一个更高端的程序(即这个脚本程序)来统一运行,它本质上就是一个单一的程序的行为。操作系统实际上不会主动替某个程序做什么,它不知道你返回的那些非零值到底是什么意思,也不会猜测你到底需要什么后续行为,如果你不主动使用那些返回值,也不过是白返回,如果使用,就是多写代码。

在IDE中,编译和链接由IDE程序负责管理,返回码给IDE用,不是给操作系统用,等于我们平时函数返回值一样的用法。在makefile文件中,也是这个脚本程序在使用。哪个操作系统能用得了这些返回值?

[ 本帖最后由 TonyDeng 于 2012-8-9 14:19 编辑 ]

授人以渔,不授人以鱼。
2012-08-09 14:15
快速回复:发两个程序,以视今天下午的学习成果,如果你也是初学者,一起加油!! ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050536 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved