PB的多线程

最近还在学习PB,有点郁闷,还是不太喜欢PB啊

 

上周五看了一下PB,感觉还简单。本来已经动手,但因为周五下午有事出去,所以拖到今天。。

 

PB的多线程用到的就几个函数

                                    SharedObjectRegister()
                                    SharedObjectGet()   

                                    SharedObjectUnregister()

用SharedObjectRegister(Classname,Instancename)     PB帮助文件是Classname和Instancename,即类名和实例名。

 

用SharedObjectGet(instancename , objectinstance)       将实例名和具体的对象实例绑定,然后就可以通过对象实例POST 出发类里预定义的过程或函数。比如在类中预定义了uo_add函数,可以objectinstance.post uo_add

 

用SharedObjectUnregister(instancename)       Unregisters a user object that was previously registered. 注销掉用户实例对象

 

eg.

 

1、定义一个nvo_multithread
      添加add(int ai_n)函数

int li_i
int li_result = 0
sleep(5)
For li_i= 0 To ai_n
      li_result+=li_i
Next
messagebox("",string(li_result))

 

 

2、定义一个窗口,在Instance Variables定义变量:nvo_multithread invo_thread

 

3、在Open事件中的代码:

invo_thread = Create nvo_multithread
SharedObjectRegister ("nvo_multithread" ,"thread1" )
SharedObjectGet ("thread1" , invo_thread)

4、在Close事件中的代码:

 

Destroy invo_thread
SharedObjectUnregister("thread1")

5、可以在一个按钮的Click事件中调用:

 

int i
invo_thread.post add(i)

调用后,就可以异步执行了

 

注意点:如果想要多个线程一起执行,就一定要多注册几个实例对象。即多执行几次2、4步。可以用数组来做。

                比如我在Instance Variables定义成nvo_multithread invo_thead[5]

                Open事件:For li_ii= 1 to 5
                                        invo_th[li_ii] = Create nvo_multithread
                                        SharedObjectRegister( "nvo_multithread" , "tthread" + string(li_ii) )
                                        SharedObjectGet ("tthread" + string(li_ii) , invo_th[li_ii] )
                                     Next
                Close事件:For li_ii= 1 to 5

                                         Destroy invo_th[li_ii]
                                         SharedObjectUnregister("thread" + string(li_ii))
                                     Next

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
注意事项: 1、主进程传入的对象或变量不管是不是ref线程内操作传入的引用都会影响主进程的对象或变量,且对象只能是nonvisualobject类型的。 2、基础变量如long等等都不能传引用ref会运行会报错 3、SharedObjectUnregister只是把SharedObjectDirectory中的去掉,实际内存不会释放必须destroy 4、主进程不能直接访问线程中的变量和对象,可以通过处理类私有的办法处理。 5、千万注意释放线程的时候一定要把线程里面的资源释放完,不然百分百卡死。比如一个线程里面有一个timing的计时器,如果不先stop(),直接destroy,百分百卡死。如果连接数据库或者其他接口时千万注意了!!!千万要在uf_stop()(此例子中的释放预留方法)里面把所有的资源都释放干净,资源都释放干净,源都释放干净,都释放干净,释放干净,放干净,干净,净…… 大体设计思路: 1、在主进程中建立一个“任务信息类”数组,其中包含“任务线程类”,一个任务对应一个线程。 2、在主进程中建立一个“任务管理类”,负责处理任务信息类。 简单举例: 1、新建1个“任务管理类”,再新建N“任务信息类”,将“任务信息类”赋值完成加入“任务管理类”,并创建一个“任务线程类”,此时线程开始running。 2、“任务线程类”中有一个内部timing类,监控自己是否执行完成,会改标志。“任务管理类”也有一个timing监控“任务信息类”和“任务线程类”的情况,把完成的结束。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值