社区
PowerBuilder
帖子详情
PB的异步处理
xmdou
2001-12-06 04:45:08
不知那里有PB异步处理文章,帮帮忙啊,谢谢
...全文
541
2
打赏
收藏
PB的异步处理
不知那里有PB异步处理文章,帮帮忙啊,谢谢
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lesni
2001-12-06
打赏
举报
回复
如果需要,有一个现成的pbl例程。下面是一个方法:
用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就是点击“多线程”后执行的一瞬间。
Hanson_bati_zhu
2001-12-06
打赏
举报
回复
在163上查
“PB 多线程”
不知道对你是否有帮助
8-)
学习Hibernate5这一篇就够了
目录第一章 Hibernate5快速入门1.1、Hibernate5概述1.2、Hibernate5下载1.3、Hibernate5工程搭建1.4、Hibernate5测试代码1.5、Hibernate5工具类第二章 Hibernate5核心配置2.1、两种配置方式2.1.1、属性文件的方式(了解)2.1.2、xml文件的方式(掌握)2.2、核心配置讲解2.2.1、核心的配置2.2.2、映射的配置2.3、核心对象讲解2.3.1、Configuration2.3.2、SessionFactory2.3.3、S
Hibernate 4升级到Hibernate 5遇到的两个问题
问题一 Hibernate 4构建SessionFactory的方式与Hibernate 5的构建方式不同。 如果在Hibernate 5的环境下继续使用Hibernate 4的sessionFactory创建方式,那么Configuration或者Metadata对象里面没有项目所映射的Entity,造成项目运行时报错,比如: org.hibernate.MappingException...
spring5整合hibernate5
由于网上资源太少了,本人决定自己写一篇hibernate5整合spring5的教程。 本教程项目是基于maven来写,此处给出其项目配置文件pom.xml: 一、项目pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Spring 5 MVC + Hibernate 5
Spring 5 MVC + Hibernate 5示例 创建Spring 5 MVC Web应用程序,
处理
表单提交,集成hibernate 5连接到后端数据库,并为输入表单字段验证添加hibernate验证器。 创建一个简单的屏幕,可以在其中添加用户字段(名称和电子邮件)。首先验证这些细节,然后使用hibernate将其存储在Mysql数据库中。该页面还将列出所有存储的用户。 目录 Sp...
Spring5 整合 Hibernate5 学习
XML配置文件代码如下<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http
PowerBuilder
1,111
社区成员
66,454
社区内容
发帖
与我相关
我的任务
PowerBuilder
PowerBuilder 相关问题讨论
复制链接
扫一扫
分享
社区描述
PowerBuilder 相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章