關於檔案的ShareODP和USROPN

2021-06-01 19:27:00 字數 1449 閱讀 4711

關於檔案的shareodp和usropn

1.shareodp:

在pf或者lf編譯的時候,有個share(share open data path)的引數,控制該檔案是否共享其開啟路徑。

如果指定share為*no的話,程式在每次開啟乙個檔案的時候,都會為該檔案建立一次訪問路徑;如果指定share為*yes的話,程式在第一次開啟該檔案的時候,系統建立該檔案的訪問路徑,在同乙個activegroup中再開啟該檔案時,就不再重新建立該檔案的訪問路徑,而是共享使用之前建立的路徑,從而提高了程式執行的速度。

一般在編譯的時候該引數設定為*no,即不是共享開啟。在需要共享開啟的時候,使用ovrdbf對該引數進行更改。

使用shareodp需要注意的一些東西:

1).由於在不同的activegroup之間不能shareodp,所以如果幾個程式在編譯的時候沒有加入到同乙個activationgroup中,shareodp就不會有什麼效果。

2). 如果pgma開啟filea並定位到了第一條記錄,然後pgma呼叫pgmb;pgmb也開啟了filea並直接讀filea,將讀到第二條記錄; pgmb執行完後pgma又繼續讀filea下一條記錄,此時它讀到的將是第三條記錄。而如果沒有shareodp的話,pgma兩次讀到的會是第一條和第二條記錄,pgmb讀到的會是第一條記錄。

activegroup:

在crtpgm 的時候,有個引數actgrp(activationgroup),控制該pgm在執行的時候屬於哪個activegroup。如果指定*new,則該 pgm會重新建立乙個activegroup;如果指定為*caller,則該pgm會與呼叫它的pgm使用同乙個activegroup。

2.useropen:

rpg程式在使用f表引用外部檔案的時候,有乙個keywords是usropn。

在沒有使用usropn的時候:系統會在每次執行該程式的時候自動開啟所引用的檔案;一般可以通過設定*lr為*on來自動關閉檔案,但是如果是subprocedure,系統不會自動關閉所開啟的檔案。

如果指定了usropn:則系統不再控制檔案的開啟與關閉,由使用者手工進行檔案的open與close;如果乙個模組已經開啟還沒有關閉檔案的情況下,該模組將不能再對該檔案做開啟的操作。

usropn比系統自動開啟檔案要慢一些。在開啟同乙個檔案5000次的情況下,usropn使用了400毫秒,系統自動開啟只用了4毫秒。

使用useropen需要注意的一些東西:

1).在open之前最好使用 %open(filename) 檢查要開啟的檔案是否已經開啟,如果沒有開啟再執行open的操作。

2). close *all的命令可以關閉本模組開啟的所有檔案。如果乙個檔案沒有指定為usropn,close *all也將關閉該檔案。並且如果該模組是不參與rpg cycle的程式,如乙個subprocedure,則在第二次執行本模組的時候,該檔案將不會再自動開啟,此時如果再對該檔案做操作,就會出錯。所以最好指定檔名來close,並注意只關閉usropn的檔案。

關於檔案的Share ODP 和 USROPN

1 shareodp 在pf或者lf編譯的時候,有個share share open data path 的引數,控制該檔案是否共享其開啟路徑。如果指定share為 no的話,程式在每次開啟乙個檔案的時候,都會為該檔案建立一次訪問路徑 如果指定share為 yes的話,程式在第一次開啟該檔案的時候,...

關於U3D中的移動和旋轉

第乙個引數標識移動的距離,是乙個向量 第二個引數是因為遊戲物件有自己的座標系,還有乙個世界座標系,使用的座標系不同將導致運動的結果不同 function translate translation vector3,relativeto space space.self void 繞著自己旋轉,在u3...

關於標頭檔案和原始檔的分別

關於標頭檔案和原始檔的分別 首先,我們可以將所有東西都放在乙個.cpp檔案內.然後編譯器就將這個.cpp編譯成.obj,obj是什麼東西?就是編譯單元了.乙個程式,可以由乙個編譯單元組成,也可以有多個編譯單元組成.如果你不想讓你的源 變得很難閱讀的話,就請使用多個編譯單元吧.乙個函式不能放到兩個編譯...