kdb\t计时器未停止操作
我有一个客户端函数,可以查询3个远程服务器上的表,并从每个服务器中提取每个字母数字字符的数据 在函数结束时,计时器会检查每个服务器上运行的kdb\t计时器未停止操作,kdb,Kdb,我有一个客户端函数,可以查询3个远程服务器上的表,并从每个服务器中提取每个字母数字字符的数据 在函数结束时,计时器会检查每个服务器上运行的字典,如果每个字符都已运行(所有字典值都设置为1b),则应停止计时器并关闭连接句柄 但是,我发现计时器没有停止,在最后一个字符运行后(dictionary values all=1b),循环将再次尝试启动,这会导致系统挂起 如何重写计时器函数,使其在all running的值为1b时有效关闭连接句柄 函数的最后3行如下所示 f:{ ...do
字典,如果每个字符都已运行(所有字典值都设置为1b),则应停止计时器并关闭连接句柄
但是,我发现计时器没有停止,在最后一个字符运行后(dictionary values all=1b),循环将再次尝试启动,这会导致系统挂起
如何重写计时器函数,使其在all running
的值为1b
时有效关闭连接句柄
函数的最后3行如下所示
f:{
...do stuff here...;
if[hA"all running"; system "t 0";hclose hA;];
if[hB"all running"; system "t 0";hclose hB;];
if[hC"all running"; system "t 0";hclose hC;];
}
.z.ts:{f params}
\t 5000
hA
、hB
和hC
是我的connecton句柄
.z.ts
每5秒运行一次该函数
params
从命令行抓取字符,该命令行在脚本启动时设置
一旦all running
的值为1b
时,我想停止函数运行,正如@terrylyynch关于“在所有句柄完成处理后停止计时器”的评论所述。我加入了if
语句(停止计时器)转换为单数的if
语句,并将其移动到.z.ts
函数中
.z.ts:{f params;if[(hA"all running")and(hB"all running")and(hC"all running");system "t 0";hclose hA; hclose hB; hclose hC]}
这在初始测试时似乎是可行的。您只想在所有句柄完成处理后停止计时器,对吗?不确定为什么在单个句柄完成后将计时器设置为零processing@terrylynch没错。您是否建议使用带有和值的if
语句,例如if[(hA“全部运行”)和(hB“全部运行”)和(hC“全部运行”);system“t0”;hclose hA;hclose hB;hclose hC]
?我的另一个想法是将那些if语句移动到.z.ts
函数中,使其看起来像.z.ts:{f params;if[(hA“all running”)和(hB“all running”)和(hC“all running”);system“t0”;hclose hA;hclose hB;hclose hC]}
。是的,这会更有意义——在做任何其他事情之前检查所有都是真的。把它放在计时器里可能也是个好主意,因为它会清理f
函数