PowerBuilder线程使用中的一个坑

PowerBuilder通过 Shared.... 函数来使用线程。

例如:

int i

for i = 1 to 10

      SharedObjectRegister("uo_thread_test","thread_" + string(i))

next

接下来,可以使用 SharedObjectGet 函数取得对象实例,然后用  post 调启动线程 。如果在 uo_thread_test  对象的 constructor 事件里已经有代码,这些代码 其实在 SharedObjectRegister 成功后已经开始运行,也就是构造函数里可以直接实现线程任务,不需要SharedObjectGet然后再post。

对象用完后,可以SharedObjectUnregister来释放这个线程。

那么这个坑在哪呢?既然 constructor 事件里面可以写代码,直接实现线程任务。SharedObjectUnregister释放线程,会触发uo_thread_test  对象的 destructor 事件。destructor 事件里可以写代码在线程结束后进行线程的一些清理任务吗?

答案是否定的!!!

uo_thread_test  对象的destructor里的任何代码都可能导致程序崩溃。原因是此时线程的运行环境已经被PB释放掉了,再在这个环境里运行代码,必然造成内存违规访问。

经验教训:不要在线程对象的destructor事件里写任何代码!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值