免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: blogliou
打印 上一主题 下一主题

RETURN与SETON LR结束程序区别 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-02-01 19:24 |只看该作者

大家帮帮忙吧!百思不的其解的问题看看是错在哪。

##1
1>    MAIN            BEGSR
2>                        Z-ADD    6     P1NBR               4 0
3>                        EXSR      SFL20_1
4>                        ENDSR
##2
5>   SFL20_1       BEGSR                          
6>                        ADD       1      P1NBR  
7>                        ENDSR

一个程序里的两个函数,当MAIN被调用执行到第三行的时候,P1NBR的值是6.
但当去调用SFL20_1 的时候,P1NBR变成了其他的值.本来加1以后是7的结果就发生了错误.
真是百思不的其解. 看看各位高手有没有遇到过同样的问题.

在整个程序中使用过RETURN,不知道是不是它造成的.

论坛徽章:
0
12 [报告]
发表于 2007-02-02 09:10 |只看该作者
3楼说得还可以!补充一下:
说到seton LR on 和 return的区别,要从rpg circle说起,rpg程序都遵守rpg circle的运行规则,LR置为1表示程序时会完全结束,按照rpg circle的运行规则,当LR=1时,程序并不立刻退出,什么时候退出呢?如果遇到RT=1,程序立刻退出,或者Detail Calculation全部运行结束后退出程序。我们可以看看我们写的程序,程序结束通常都是 set on lr 然后 return。有兴趣的人可以在两句话之间加上一个dsply,在return后面加上一个dsply,看看执行情况就明白了。
rt=1时,程序立刻返回,是否退出要看lr是否是1,如果是1,程序完全退出,如果不是1,那么程序驻留内存,包括打开的文件,此时程序再次被调用时,会很快,但是注意*inzsr段不被执行。就说这么多,有兴趣的人可以看看refferrence 中关于rpg circle的说明。

论坛徽章:
0
13 [报告]
发表于 2007-02-02 16:55 |只看该作者
RETURN  后面的语句不会在执行了。

论坛徽章:
0
14 [报告]
发表于 2007-02-19 00:29 |只看该作者

seton lr 是针对主程序的 PROGRAM CIRCLE的, return是HLL的退出原语; 不可混淆!

- seton lr 是针对主程序的 PROGRAM CIRCLE的, 说明至此要释放PROGRAM CIRCLE用到的所有资源;
- return 是个HLL退出原语, 用在RPG subprocedure里是返回, 用在 main procedure里是退掉PGM所在激活组;
- 二者一起用在MAIN PROCEDURE里是个隐含的错误: 在多线程应用里, 如果CALL了一个MAIN PROCEDURE中含RETURN OP 且 该PGM使用系统命名激活组(即ACTGRP(*NEW)); 那么该PGM的RETURN将END掉整个作业.

论坛徽章:
0
15 [报告]
发表于 2007-07-22 09:58 |只看该作者
在rpg3中如何区分MAIN PROCEDURE及RPG subprocedure程式?

论坛徽章:
0
16 [报告]
发表于 2007-11-08 23:36 |只看该作者
明白,原来讨论与分享是件有意思的事~~~

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2007-11-13 21:20 |只看该作者
在这里面也可以设定记录条数,当改变记录条数达到这个数时,会强制写入磁盘.  假若这里设置条数为1, 那么每次改变或增加一条记录,就会立即写入磁盘. 但这样就增加了I/O次数, BLOCK输出方式也失去了意义. 但可以确保有RETURN结束的程序不会引起其他程序因数据原因出错.



以前好像遇到类似问题,不通过seton lr 直接 return ,实际上文件没关,后面想clrpfm 遇到自锁,后来干脆改了应用api,最后一次调的时候,根据标志 seton lr 再 return ,这个倒是可以兼顾性能问题,就是改动大了。

论坛徽章:
0
18 [报告]
发表于 2012-07-21 12:34 |只看该作者
回复 14# zhihui.tree

你好, 对于RETURN ,如果程序指定的ACTGRP 是系统自动生成的话,那么,每一次RETURN,系统会删除ACTGRP及其所占用的资源,
如果ACTGRP由用户指定的话,那么,每一次RETURN,系统不会删除该ACTGRP及其资源,只有当该ACTGRP所在JOB被END时,才会删除ACTGRP;如果ACTGRP是*CALLER类型的话,程序RETURN,返回到了调用堆栈的硬边界,系统才会删除ACTGRP.

应该不会,存在你所说的,这种隐患吧?

"二者一起用在MAIN PROCEDURE里是个隐含的错误: 在多线程应用里, 如果CALL了一个MAIN PROCEDURE中含RETURN OP 且 该PGM使用系统命名激活组(即ACTGRP(*NEW)); 那么该PGM的RETURN将END掉整个作业."

   

论坛徽章:
13
15-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:032015亚冠之北京国安
日期:2015-10-07 14:28:19NBA常规赛纪念章
日期:2015-05-04 22:32:03处女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46寅虎
日期:2014-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56狮子座
日期:2013-09-08 08:37:52
19 [报告]
发表于 2012-07-26 09:25 |只看该作者
支持原创 ^_^

论坛徽章:
0
20 [报告]
发表于 2013-07-09 15:56 |只看该作者
现在使用 RETURN 会报编译错误~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP