社区
API 调用
帖子详情
PB如何实现多线程?
sanshui_yangfei
2003-05-27 11:43:53
如下语句:
FOR ......
....
FOR.....
....
NEXT
在这个循环完后我想看看有没有其他消息处理(比如TIMER)。在vc中可以调
PeekMessage函数
NEXT
不知在pb中如何实现?
...全文
435
6
打赏
收藏
PB如何实现多线程?
如下语句: FOR ...... .... FOR..... .... NEXT 在这个循环完后我想看看有没有其他消息处理(比如TIMER)。在vc中可以调 PeekMessage函数 NEXT 不知在pb中如何实现?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
blazingstar
2003-06-14
打赏
举报
回复
如果非要用PB做只能用SharedObject,模拟出多线程来。
下面的例程就是用SharedObject,模拟多线程实现的。
http://www.pdriver.com/display.asp?key_id=1485
homeness
2003-06-10
打赏
举报
回复
up
raozhiven
2003-06-10
打赏
举报
回复
yield()
jackxrh
2003-05-29
打赏
举报
回复
自己到 vc++ 里写 DLL 实现吗 , pb 实现 多线程的方法效率很低,不好用 ..
joss
2003-05-27
打赏
举报
回复
呵呵,一篇收藏的文章,慢慢看!
joss
2003-05-27
打赏
举报
回复
用PB编写多线程应用程序
多线程是指一个程序内部同时执行的多个流程,与单线程相比,它至少有两个方面的优点:第一,它可以更好地利用系统资源,比如CPU,若一个线程因I/O操作受阻,另一个线程仍可利用CPU来执行;第二,它更好地满足了客户的需求,因为挑剔的客户希望你开发的程序在显示动画的同时还能播放音乐、显示文件、下载网络文件等,这是单线程应用程序无法完成的。目前,支持多线程的开发工具主要有:Java、VC、Delphi和C++Builder。
多线程强调的是一个进程内部有多个流程在同时执行,同时执行的概念相当于PB分布式计算中的异步处理。也就是说,只要我们在一个程序内部实现了异步处理,就相当于实现了多线程。分析至此,下一步该怎么做就不言而喻了:在一个应用程序内部实现分布式计算,使用服务器推送技术,异步执行共享对象中的函数。
下面就编写一个Demo,介绍在PB中如何利用分布式计算技术来开发多线程应用程序,其程序结构如图1所示。uo—thread1和uo—thread2是类用户对象uo—thread的两个实例,uo—thread的功能是给实例变量li—Count自加5秒,自加的同时向中间对象uo—argv1和uo—argv2发送ue—thread消息。两个中间对象的功能是把ue—thread消息转化为ue—thread1和ue—thread2后发给主窗口w—main。
主窗口接收到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事件处理代码为:
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就是点击“多线程”后执行的一瞬间。
PB
多线程
实现
包含
PB
9
PB
12.5和
PB
.NET
多线程
的
实现
方法
PB
多线程
例子,
PB
源码
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码,
PB
实现
多线程
开发,
PB
源码
演示
PB
如何
实现
多线程
演示了
PB
如何
实现
多线程
,
实现
了两个对象。
pb
9
多线程
控件,能够真实
实现
多线程
原版本是
pb
11.5的,现转成
PB
9.0,有例子,虽不太完善但却能真正
实现
多线程
,而不是
PB
本身所
实现
的共享机制。
pb
多线程
处理,全部源码
pb
多线程
处理的全部源码,能
实现
windows
多线程
工作方式。
API 调用
680
社区成员
4,762
社区内容
发帖
与我相关
我的任务
API 调用
PowerBuilder API 调用
复制链接
扫一扫
分享
社区描述
PowerBuilder API 调用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章