kdb\t计时器未停止操作

kdb\t计时器未停止操作,kdb,Kdb,我有一个客户端函数,可以查询3个远程服务器上的表,并从每个服务器中提取每个字母数字字符的数据 在函数结束时,计时器会检查每个服务器上运行的字典,如果每个字符都已运行(所有字典值都设置为1b),则应停止计时器并关闭连接句柄 但是,我发现计时器没有停止,在最后一个字符运行后(dictionary values all=1b),循环将再次尝试启动,这会导致系统挂起 如何重写计时器函数,使其在all running的值为1b时有效关闭连接句柄 函数的最后3行如下所示 f:{ ...do

我有一个客户端函数,可以查询3个远程服务器上的表,并从每个服务器中提取每个字母数字字符的数据

在函数结束时,计时器会检查每个服务器上运行的
字典,如果每个字符都已运行(所有字典值都设置为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
函数