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. SRM478

    又是rng_58的神题.. 250pt: 题意:给定一个初始数x,对于这个数可以进行x*4+3,或者x*8+7的操作.最多进行100000次操作 问最少经过几次出现%1000000007 == 0的情 ...

  2. 利用RGB-D数据进行人体检测 带dataset

    利用RGB-D数据进行人体检测 LucianoSpinello, Kai O. Arras 摘要 人体检测是机器人和智能系统中的重要问题.之前的研究工作使用摄像机和2D或3D测距器.本文中我们提出一种 ...

  3. SQLSERVER CXPACKET 等待

    --SQLSERVER CXPACKET 等待 2013-6-11 2 --联机丛书: 3 --当尝试同步查询处理器交换迭代器时出现.如果针对该等待类型的争用成为问题时,可以考虑降低并行度 4 5 6 ...

  4. 检查.net dll构建的目标平台是any cpu、x86、x64

    有时候,需要检查构建的dll是否针对正确的平台 可以使用CorFlags.exe(它是.NET Framework SDK的一部分)从dll中查找此信息.运行CorFlags.exe将产生以下输出: ...

  5. [翻译]Bitmap的异步加载和缓存

    内容概述 [翻译]开发文档:android Bitmap的高效使用 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently", ...

  6. CE+X64dbg外挂制作教程 [提高篇]

    人造指针&基址 实验目标:通过向游戏注入一段特殊汇编代码,实现自动获取动态地址.省略找基址的麻烦 为什么会出现人造指针 ? 1.基址偏移层数太多,很难找 2.有些游戏根本找不到基址 人造指针有 ...

  7. PHP中正则表达式函数(Perl兼容)

    PHP为使用Perl兼容的正则表达式搜索字符串提供了7个函数,分别是preg_grep().preg_match().preg_match_all().preg_quote().preg_replac ...

  8. TmsHttpClientUtil

    package com.sprucetec.tms.utils; import java.io.IOException;import java.security.GeneralSecurityExce ...

  9. 移动端font-size适配方案(续)

    概述 之前写过一篇移动端font-size适配方案,但是在实践过程中,还是发现当时的思维太局限了,视野太窄了,所以现在补充更新一下,记录下来,供以后开发时参考,相信对其他人也有用. 我上一篇博文主要有 ...

  10. 【Junit4】:要点随笔

    1. 引入Junit4的Maven依赖 <dependencies> <dependency> <groupId>junit</groupId> < ...