前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

PowerBuilder 多线程问题-CSDN论坛-CSDN.NET-中国最大的IT技术社区 --> 首页 论坛帮助 论坛牛人 论坛地图 CSDN > CSDN论坛 > PowerBuilder > 基础类 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 ywsjb1 PowerBuilder 多线程问题 [问题点数:20分,结帖人ywsjb1] 不显示删除回复 显示所有回复 显示星级回复 显示得分回复 只显示楼主 收藏 ywsjb1 ywsjb1 等级: 结帖率:93.75% 楼主 发表于: 2009-05-30 18:17:11 按照http://www0.ccidnet.com/tech/guide/2000/02/24/58_396.html多线程的例子照做, 到这一步:⑶uf—setparent(NonVisualObject nv—arg),调用时,使用中间对象为参数。脚本为: inv—arg=nv—arg 无法继续了,这个用户自定义函数是如何建立的呢??? NonVisualObject nv—arg 这个又是什么东西??? 更多 分享到: 相关主题推荐: PowerBuilder 多线程 对象 脚本 url 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 回复次数:20 ywsjb1 ywsjb1 等级: 结帖率:93.75% #1 得分:0 回复于: 2009-05-30 18:24:04 没人理会?? 自己先顶着。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #2 得分:0 回复于: 2009-05-30 19:06:43 原文如下: 多线程是指一个程序内部同时执行的多个流程,与单线程相比,它至少有两个方面的优点:第一,它可以更好地利用系统资源,比如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事件处理代码为:   图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.执行 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 sinlan sinlan 等级: 结帖率:100% #3 得分:0 回复于: 2009-05-30 20:34:42 建一个用户自定义对象,然后新增一个事件就可以了 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #4 得分:0 回复于: 2009-05-30 21:36:32   ⑶uf—setparent(NonVisualObject nv—arg),调用时,使用中间对象为参数。脚本为:   inv—arg=nv—arg   //用中间对象给实例变量赋值 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #5 得分:0 回复于: 2009-05-30 21:37:31 能说具体点吗?(我很菜) 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 zhanghua_1228 zhanghua_1228 等级: 结帖率:100% #6 得分:20 回复于: 2009-05-31 13:54:54 楼主发个邮箱,我自己写过一个多线程的例子,自认为还可以. 不过pb对线程的管理的支持很少,函数就这么几个..... 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 wag_enu wag_enu 等级: 结帖率:98.44% 56 #7 得分:0 回复于: 2009-05-31 14:39:22 给我发个,谢谢! [email=wang_enu@163.com][/email] 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 zhanghua_1228 zhanghua_1228 等级: 结帖率:100% #8 得分:0 回复于: 2009-05-31 15:37:16 楼上的,我已经发了 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 wag_enu wag_enu 等级: 结帖率:98.44% 56 #9 得分:0 回复于: 2009-05-31 15:43:03 已经收到,谢谢! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ugly927846 ugly927846 等级: 结帖率:66.67% #10 得分:0 回复于: 2009-05-31 16:09:11 给我 一个 zfk5021314@yahoo.com.cn 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 daixf_csdn daixf_csdn 等级: 结帖率:99.56% 2 #11 得分:0 回复于: 2009-05-31 19:43:01 过于复杂,演示程序不需要这么复杂的,看pb帮助吧 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #12 得分:0 回复于: 2009-06-01 07:43:53 ywsqq520@126.com 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #13 得分:0 回复于: 2009-06-01 07:57:18 在这一步出问题   2.设计中间对象uo—argv1和uo—argv2 //这一步通过   新建一个类用户对象,命名为uo—argv1,添加如下实例变量: //这一步通过   Window win—arg //这一步通过   创建用户函数uf—setparent(Window w—argv),调用时,用主窗口作为参数。其脚本为: //这一步有点模糊   win—arg=w—argv //这一步编译失败 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 zhanghua_1228 zhanghua_1228 等级: 结帖率:100% #14 得分:0 回复于: 2009-06-01 11:04:22 邮件我已经发了,我的例子是在pb9下 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #15 得分:0 回复于: 2009-06-01 16:42:35 邮件已收到,多谢。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 hzzz_lgh3399 hzzz_lgh3399 等级: 结帖率:100% #16 得分:0 回复于: 2009-06-01 17:22:39 me too 。 lgh7292237@163.com Thank You ! 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #17 得分:0 回复于: 2009-06-02 23:26:48 照着这个代码http://www0.ccidnet.com/tech/guide/2000/02/24/58_396.html,没次都是失败,那位高手能发个视频教程。 先谢过了。 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 zhanghua_1228 zhanghua_1228 等级: 结帖率:100% #18 得分:0 回复于: 2009-06-04 11:30:54 不是给你例子了么,你看下里面数据是怎么传递的 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ljg7428 ljg7428 等级: 结帖率:71.43% #19 得分:0 回复于: 2009-06-04 12:58:21 给我发个,学习学习,谢谢! jinhongsoft@163.com 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 ywsjb1 ywsjb1 等级: 结帖率:93.75% #20 得分:0 回复于: 2009-06-05 10:54:34 多谢各位的热心关注。 多谢 zhanghua_1228 的源代码,学习了。 结贴 对我有用[0] 丢个板砖[0] 引用 | 举报 | 编辑 删除 管理 --> --> --> --> --> --> 管理菜单 置顶 推荐 锁定 移动 编辑 删除 帖子加分 帖子高亮 结帖 发帖 回复 写出你眼中的IE11 赢取新年好礼! 勇敢写出你的爱 赢莫文蔚签名大礼 陈勇- 敏捷开发现状及发展之路 CSDN高校俱乐部 高校全新改版邀你来学习和挑战 本帖子已过去太久远了,不再提供回复功能。 核心技术类目 全部主题 Java VPN Android iOS ERP IE10 Eclipse CRM JavaScript Ubuntu NFC WAP jQuery 数据库 BI HTML5 Spring Apache Hadoop .NET API HTML SDK IIS Fedora XML LBS Unity Splashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace [关闭] [关闭]