yield通常用于大循环中释放控制权,让界面鼠标得到刷新避免”卡死“。

比如

uf_fill_data{
dw_1.reset()
for i = 1 to 3
yield()
.......
dw_1.insertrow(0)
next
}

如果遇到函数执行需要较长时间时,客户狂点鼠标触发执行这个函数,会出现异常。

避免的方法时放入一个flag

uf_fill_data_new{
if ib_busy then return
ib_busy = true
dw_1.reset()
for i = 1 to 3
yield()
........
dw_1.insertrow(0)
next
ib_busy = false
}

下图:正常的情况


yield在大循环中需要注意的一个情况_提供数据


下图:重复的情况

yield在大循环中需要注意的一个情况_apache_02


同时,这个新的小软件采用的是dw+json+php+apache+msssql2005+阿里ECS服务器 来做的。经过测试很稳定,用php来为dw提供数据感觉非常好。