PowerBuilder编程新思维2:嵌入(Thread多线程)

在PB中使用多线程,在网上有大量的文章介绍。不过深入研究并试着给出更易用的模型的,目前还只有"路人甲cw"的一篇《关于PowerBuilder多线程的一些心得》

因为PB多线程有着许多天然的限制,使用中有很多问题,那么简化模型是个必然的方向。由于我们引入了LUA脚本,使得多线程模型变得出人意料的简单。

PB线程模型

原本的PB线程,依赖于SharedObjectRegister,SharedObjectGet,SharedObjectUnRegister三个函数。依次建立Thread和Callback两个nv对象。这使得多线程的使用开销变得很大。

异步调用模型

我们可以参考一下Socket的异步模型,调用统一为一个接口,返回时利用Event事件传递数据。

比如如下接口:thread.of_execute("pb.f_func()"),作为异步调用的唯一接口,在OnResult事件中接收数据。

这就提出了一个新问题:需要具备在Lua中调用PB的能力。

PB的CALLBACK模型

在脚本脚言中调用宿主程序,需要设计Embed嵌入式CALLBACK接口。可以充分利用LUA的动态特性,实现对象的惰性绑定。

 //============================================
//对象调用说明 //调用func函数
obj.func(arg...)
//调用指定sign签名的func函数(解决重载函数调用)
obj.func.call(sign, arg...) //调用evt事件
obj.evt.send(arg...)
//调用指定sign签名的evt事件
obj.evt.sendto(sign, arg...) //属性获取
obj.prop.get()
//属性设置
obj.prop.set(val) //============================================
//全局变量访问 //全局变量var获取
pb.global.var.get()
//全局变量var设置
pb.global.var.set(val) //shared变量var获取
pb.classname.var.get()
//shared变量var设置
pb.classname.var.set(val) //============================================
//全局与类函数访问 //调用全局func函数
pb.global.func(args...)
//调用指定sign签名的func函数
pb.global.func.call(sign. arg...) //调用系统func函数
pb.system.func(args...)
//调用指定sign签名的系统func函数
pb.system.func.call(sign, arg...) //调用classname类func函数
pb.classname.func(args...)
//调用指定sign签名的func函数
pb.classname.func.call(sign, arg...) //============================================
// 创建与销毁 //创建classname对象obj
pb.classname.obj.create(name)
//创建classname窗口win
pb.classname.win.open(name) //对象销毁
obj.destroy()
//关闭窗口
obj.close()

PB的CALLBACK实例

异步调用实例

只需一行代码,实现多线程的异步调用:

i_thread.of_execute(sle_async, "return pb.global.f_amount(10000000)")

顺带说一句,Lua(5000001那个结果)的执行速度还要在PB代码之上,所以不会有什么性能问题。

源码: PowerPlumeDemoV0.2.1.rar

提供了PB10.5 PB11.5 PB12.5三个版本

<本节完>

PowerBuilder编程新思维2:嵌入(Thread多线程)的更多相关文章

  1. PowerBuilder编程新思维5:包装(界面美化与WebUI+React)

    PowerBuilder编程新思维5:包装(界面美化与WebUI+React) 前一节,分析了三种界面美化方案,都是控件级的美化.今天再来分析一下窗口级的美化.上一次讲的DirectUI,大家反响一般 ...

  2. PowerBuilder编程新思维4:钩挂(界面美化与DirectUI)

    <第二部分 Outside> PowerBuilder编程新思维4:钩挂(界面美化与DirectUI) PB的界面由于其封闭性,一直以来都是最大的弱项.自PB9.0开放了PBNI接口后,开 ...

  3. PowerBuilder编程新思维3:适配(三层架构与GraphQL)

    PowerBuilder编程新思维3:适配(三层架构与GraphQL) PB在富客户端时代,是一线开发工具.随着网络发展,主流架构演进到三层架构的时代,PB拿不出有力的三层架构,已经明显力不从心,市场 ...

  4. PowerBuilder编程新思维1:扩展(Lua)

    前言 PowerBuilder作为开发工具退出一线行列已经很久了,在2019年来谈这样一款老旧的编程工具是否有意义?诚然,PB有着太多硬伤,但还是有它的用武之地的.而且今天讲的这个“新思维”大部分内容 ...

  5. C++编程新思维中的技巧

    1.编译器断言 技巧大致跟后面的一样,都是利用偏特化,但是在C++ 0X里面已经有static_assert,所以感觉这东西也没什么用处了,更多的只是开阔眼界 2.偏特化 就是专门对一个类型去进行特殊 ...

  6. Thread多线程(一)

    网上关于多线程的讲解有很多,意义也不用过多介绍,相信聪明的你早已知道,下面我们在剖析一下JAVA中的多线程的一些方法. 在JAVA中分别提供了两种方式实现多线程,分别继承Java.lang.Threa ...

  7. 【响应式编程的思维艺术】 (2)响应式Vs面向对象

    目录 一. 划重点 二. 面向对象编程实例 2.1 动画的基本编程范式 2.2 参考代码 2.3 小结 三. 响应式编程实现 四. 差异对比 4.1 编程理念差异 4.2 编程体验差异 4.3 数学思 ...

  8. 《C++设计新思维》Command设计模式读后感

    原文内容提领: 本书第5章标题为泛化仿函数,我认为本章真正讲述的内容可以总结出一句话! 如何利用C++老标准实现C++11新标准类似std::function提供的功能. std::function简 ...

  9. restapi(7)- 谈谈函数式编程的思维模式和习惯

    国庆前,参与了一个c# .net 项目,真正重新体验了一把搬砖感觉:在一个多月时间好像不加任何思考,不断敲键盘加代码.我想,这也许是行业内大部分中小型公司程序猿的真实写照:都是坐在电脑前的搬砖工人.不 ...

随机推荐

  1. int与String互转

    1.把String转化为int类型 Integer.valueOf(i); 2.把int转化为String 1)String.valueOf(i) 2)Integer.toString(i) 3)i+ ...

  2. AngularJS 路由 resolve属性

    当路由切换的时候,被路由的页面中的元素(标签)就会立马显示出来,同时,数据会被准备好并呈现出来.但是注意,数据和元素并不是同步的,在没有任何设置的情况下,AngularJS默认先呈现出元素,而后再呈现 ...

  3. java web开发遇到的常见问题解决办法(汇总贴)

    1. maven下载jar包失败,重复 maven --> update project 不管用 解决办法:  1.打开本地仓库所在目录, 通过win文件夹的搜索功能,查找 *.lastUpda ...

  4. Oracle EBS主界面的Top Ten List

    http://blog.csdn.net/pan_tian/article/details/7749128 Top Ten List的数据保存在表FND_USER_DESKTOP_OBJECTS中,登 ...

  5. [Proposal]MyTools

    [名称]:MyTools [需求分析]:现在市场上常用的移动端工具类APP,要么功能单一,如手电筒,录音机,指南针等,要么虽然有多种功能的整合,但只是单一的堆砌,内部依然是一个个独立的功能模块,并未形 ...

  6. CentOS BIND9安装及配置

    1.安装 #yum install bind   2.备份 named.conf #cp /etc/named.conf /etc/named.conf.bak   3.编辑 named.conf ( ...

  7. ASP.Net Core 2.2 MVC入门到基本使用系列 (二)

    本教程会对基本的.Net Core 进行一个大概的且不会太深入的讲解, 在您看完本系列之后, 能基本甚至熟练的使用.Net Core进行Web开发, 感受到.Net Core的魅力. 本教程知识点大体 ...

  8. 《AngularJS深度剖析与最佳实践》笔记: 第二章 概念介绍

    第二章 概念介绍 2.1 什么是UI? 用户界面包括内容(静态信息+动态信息), 外观, 交互. 在前端技术栈中分别由HTML, CSS和JS负责. 进一步抽象, 分别对应于MVC三个主要部分: Mo ...

  9. JQuery Mobile - 导航栏选中状态代码

    class="ui-btn-active" 参考: https://wizardforcel.gitbooks.io/w3school-jqmobile/content/8.htm ...

  10. 微服务统一登陆认证怎么做?JWT ?

    无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ...