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

Powerbuilder

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
}

下图:正常的情况

下图:重复的情况

同时,这个新的小软件采用的是dw+json+php+apache+msssql2005+阿里ECS服务器 来做的。经过测试很稳定,用php来为dw提供数据感觉非常好。可以看我的另一篇文字介绍:http://blog.csdn.net/chengg0769/article/details/71106186