图1 程序结构
主窗口接收到ue—thread1消息后,显示uo—thread1中自加变量的值,接收到ue—thread2后,显示uo—thread2中自加变量的值。在单线程中,uo—thread1先执行,5秒钟后uo—thread2开始执行,因此,前5秒内主窗口只能收到ue—thread1消息,后5秒内只能收到ue—thread2消息。在多线程中,uo—thread1和uo—thread2同时执行,因此w—main可以不断地收到ue—thread1和ue—thread2消息。 1.设计用户对象uo—thread 新建一个类用户对象,命名为uo—thread,添加如下两个实例变量: NonVisualObject inv—arg Long li—Count //自加变量 创建如下三个用户函数: ⑴uf—start(),功能是:完成自加5秒并向中间对象发送ue—thread消息。脚本为: Time t0 t0= Now() //获取当前时间 Do While SecondsAfter(t0,Now())〈=5 li—Count++//实例变量自加5秒 inv—arg.TriggerEvent(′ue—thread′) //向中间对象发送ue—thread消息 Loop ⑵uf—getcount(),功能是:获取自加变量的瞬间值。其脚本为: Return li—Count //返回实例变量 ⑶uf—setparent(NonVisualObject nv—arg),调用时,使用中间对象为参数。脚本为: inv—arg=nv—arg //用中间对象给实例变量赋值 2.设计中间对象uo—argv1和uo—argv2 新建一个类用户对象,命名为uo—argv1,添加如下实例变量: Window win—arg 创建用户函数uf—setparent(Window w—argv),调用时,用主窗口作为参数。其脚本为: win—arg=w—argv //用主窗口对象给实例变量赋值 声明用户事件ue—thread,用于对uo—thread1发出的uo—thread消息进行响应,其脚本为: win—arg.TriggerEvent(″ue—thread1″) //向主窗口发送ue—thread1消息 uo—argv2和uo—argv1完全一样,只需将uo—argv1中的ue—thread1改为uo—thread2即可。 3.设计主窗口w—main 主窗口外观如图2所示,凹下的三个控件分别为:st—thread1、st—thread2、st—time,分别用于显示uo—thread1和uo—thread2中自加变量的当前瞬间值和系统时间。声明两个用户事件:ue—thread1和ue—thread2,分别用于对中间对象发送来的ue—thread1和ue—thread2消息进行响应。ue—thread1事件处理代码为:
图2 主窗口
st—thread1.Text=String(uo—thread1.uf—getcount()) ue—thread2事件的处理代码为: st—thread2.Text=String(uo—thread2.uf—getcount()) w—main的Open事件代码为: uo—arg1 = Create uo—argv1 //初始化中间对象的一个实例 uo—arg2 = Create uo—argv2 uo—arg1.uf—setParent(This) //给中间对象的实例变量赋值 uo—arg2.uf—setParent(This) Timer(1) //启动定时器 Timer事件处理代码为: st—time.Text=String(Now())//显示当前时间 在“单线程”的Clicked事件中加入下列代码: SharedObjectUnRegister(″object1″) //注销先前注册过的共享对象object1 SharedObjectUnRegister(″object2″) //注销先前注册过的共享对象object2 If IsValid(uo—thread1) Then Destroy uo—thread1 //若uo—thread1已经存在,先删除 If IsValid(uo—thread2) Then Destroy uo—thread2 uo—thread1=Create uo—thread //初始化uo—thread1 uo—thread2=Create uo—thread uo—thread1.uf—setparent(uo—argv1) //用中间对象给uo—thread1中的实例变量赋值 uo—thread2.uf—setparent(uo—argv2) uo—thread1.Post uf—start() //执行uo—thread1中的uf—start()函数,完成后才执行下一句 uo—thread2.Post uf—start() //上一条语句执行完成后才会执行 在“多线程”的Clicked事件中加入下列代码: SharedObjectRegister(″uo—thread″,″object1″) //将uo—thread对象注册为object1 SharedObjectRegister(″uo—thread″,″object2″) //将uo—thread对象注册为object2 SharedObjectGet(″object1″,uo—thread1) //用uo—thread1引用共享对象object1 SharedObjectGet(″object2″,uo—thread2) //用uo_thread2引用共享对象object2 uo—thread1.uf—setparent(uo—argv1) //用中间对象给uo—thread1中的实例变量赋值 uo—thread2.uf—setparent(uo—argv2) uo—thread1.Post uf—start() //利用服务器推送技术,异步调用共享对象中的uf—start() uo—thread2.Post uf—start()//相当于启动线程 4.执行 执行程序后,图2就是点击“多线程”后执行的一瞬间。
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18