REALTIME 运算符应该以毫秒为单位输出时间。 我想用它作为 RAND 的种子,但输出始终是 24 到 31 之间的两位数。我是如何误解实时运算符的?有没有我在红、绿、蓝参考书中找不到的替代方案? 我正在使用 Linux (ubuntu 22) Ghostscript gs --版本 9.55.0
代码
%!PS
/inch {72 mul} def
/Times-Roman findfont 15 scalefont setfont
1 inch 10 inch moveto
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
showpage
% OUTPUT IS ALWAYS A 2 DIGIT INT WITH 5 NOUGHTS
%
% 2700000 2700000 2700000 2700000 2700000 2700000
%
使用从 Git 存储库的当前 HEAD 构建的二进制文件,
realtime
运算符不会为我返回 24 到 31 之间的值,我会得到一个稳定增加的值。
Ubuntu 软件包维护者可能改变了
realtime
的操作,或者在过去 3 年里发生了一些变化。尝试从当前源代码构建,您将需要 C 编译器(gcc 或 clang)GNU make 和 autotools。
不要使用 cvs 和 show 在输出上打印值,而是尝试使用
realtime ==
它将结果发送到后台通道。您可以通过交互式 PostScript 提示来执行此操作。
您不需要继续定义字符串,您应该使用堆栈。事实上,您不需要像现在一样在 systemdict 中不断定义键/值对。
例如您的代码:
/str6 200 string def
/rrr {realtime} def
rrr 100000 mul str6 cvs show
( ) show
可以写成:
realtime
100000 mul
100 string cvs
show
你可以把它写成一个函数:
/print_realtime
{
realtime
100000 mul
100 string cvs
show
} bind def
所有这些都在没有定义
str6
或 rrr
的情况下完成,更不用说不断地重新定义它们了。
在大多数 PostScript 解释器上,乘以 100000 很快就会耗尽整数值。
请注意 PLRM 表示:
“实时值表示的时间单位是一毫秒。但是,其变化的速率取决于实现。”
所以从技术上来说它根本不需要改变。您可能最好使用用户时间,尽管这可能只跟踪处理器执行时间。
如果我没记错的话,Linux 上的 Ghostscript 对这两个函数都使用 gettimeofday。