【问题标题】:Opening a STREAM in a Persistent Procedure Function在持久过程函数中打开 STREAM
【发布时间】:2015-07-08 09:48:47
【问题描述】:

我有一个持久性过程,我试图在其中打开、写入和关闭一个流。

我在程序的主要区域

DEFINE STREAM sOutFile.
OPEN STREAM sOutFile TO VALUE( outFileName ).
MESSAGE SEEK( sOutFile ).

随后是持久过程中的一个函数

FUNCTION example RETURN LOGICAL:
  MESSAGE SEEK( sOutFile ).
  PUT STREAM sOutFile UNFORMATTED someData.
END.

实例化持久过程时,消息显示“0”,因此流已打开。但是,当调用示例时,消息显示“?”我收到一条关于尝试写入已关闭流的消息。

我尝试将流声明为 NEW SHARED,但这没有任何区别。

是我做错了什么,还是无法在持久过程中定义流?

【问题讨论】:

    标签: progress-4gl openedge


    【解决方案1】:

    时间还早,我的咖啡还没开始,但我认为你必须在 PP 体外打开流。

    这行得通:

    /* ppstream.p
     *
     */
    
    define stream logStream.
    
    session:add-super-procedure( this-procedure ).
    
    /* end of PP init */
    
    function initLog returns logical ( input lgFile as character ):
      output stream logStream to value( lgFile ) unbuffered.
      return true.
    end.
    
    function logStuff returns logical ( input msg as character ):
      put stream logStream unformatted msg skip.
      return true.
    end.
    

    然后这样称呼它:

    function initLog  returns logical ( input lgFile as character ) in super.
    function logStuff returns logical ( input msg as character ) in super.
    
    run ./ppstream.p persistent.
    
    initLog( "log.txt" ).
    logStuff( "test" ).
    

    (我使用会话超级过程来避免必须定义句柄——您不一定需要这样做。)

    【讨论】:

    • PP 的初始调用与常规 .p 的行为类似 - 在初始传递时打开的任何 OUTPUT 在过程返回时关闭。这就是您需要以这种方式打开和关闭它的原因 - 在最初设置 PP 之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多