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

时间:2022-08-26 17:43:30

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的能力。

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

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实例

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

异步调用实例

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

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

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

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

源码: PowerPlumeDemoV0.2.1.rar

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

<本节完>

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

  1. PowerBuilder编程新思维5:包装(界面美化与WebUI&plus;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&plus;&plus;编程新思维中的技巧

    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&plus;&plus;设计新思维》Command设计模式读后感

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

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

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

随机推荐

  1. &lbrack;noip2010&rsqb;关押罪犯 并查集

    第一次看的时候想到了并查集,但是不知道怎么实现: 标解,f[i]表示i所属的集合,用f[i+n]表示i所属集合的补集,实现的很巧妙,可以当成一个使用并查集的巧妙应用: #include<iost ...

  2. pcDuino 刷系统-LiveSuit

    准备: pcduino : 点此购买 支持HDMI的显示器:点此购买  或参考无显示器刷机与使用.至少1张4G microSD卡,如果内存卡不大,可以用内存卡刷内核,用u盘刷系统   LiveSuit ...

  3. warning:1071 &lpar;42000&rpar; Specified key was too long&semi;max key length is 1000 bytes

    原因是mysql字段长度设置的太长了, 从而导致mysql在建立索引时,索引长度超过了mysql默认许可的长度 默认 Innodb 允许长度为 767 MyISAM 允许长度为 1000 官方说明 如 ...

  4. 抽象基类&lpar;ABC&rpar;,纯虚函数

    #ifndef _ACCTABC_H_ #define _ACCTABC_H_ //(* #include <iostream> #include <string> //*) ...

  5. html 标签释义

    position  位置  给....定位   作用:定位 position:fixed  锁定游览器位置 如右下角弹窗 absolute  绝对定位    游览器左上角      position: ...

  6. SpringMVC4&plus;MyBatis3&plus;SQLServer 2014 整合(包括增删改查分页)

    前言 说起整合自然离开ssm,我本身并不太喜欢ORM,尤其是MyBatis,把SQL语句写在xml里,尤其是大SQL,可读性不高,出错也不容易排查. 开发环境 idea2016.SpringMVC4. ...

  7. 关于python 使用腾讯云OCR 通用印刷体识别

    腾讯的python SDK没有通用印刷体识别,所以参考了别人识别网上图片的方式:https://www.cnblogs.com/semishigure/p/7690789.html 但是咱们使用的基本 ...

  8. 20165235 祁瑛 2018-4 《Java程序设计》第六周学习总结

    20165235 祁瑛 2018-4 <Java程序设计>第六周学习总结 教材学习内容总结 常用实用类 (一)1.String类是final类型的,String类型常量也是对象.2.可以使 ...

  9. Linq动态查询

    public class ExpressionCall { List<Customer> customers = new List<Customer>() { new Cust ...

  10. HTTPS原理,以及加密、解密的原理。

    https://blog.csdn.net/Yang_yangyang/article/details/79702583 摘要:本文用图文的形式一步步还原HTTPS的设计过程,进而深入了解原理. A在 ...