PowerBuilder編程新思惟2:嵌入(Thread多線程)

 

PowerBuilder編程新思惟2:嵌入(Thread多線程)

在PB中使用多線程,在網上有大量的文章介紹。不過深刻研究並試着給出更易用的模型的,目前還只有"路人甲cw"的一篇《關於PowerBuilder多線程的一些心得》編程

由於PB多線程有着許多自然的限制,使用中有不少問題,那麼簡化模型是個必然的方向。因爲咱們引入了LUA腳本,使得多線程模型變得出人意料的簡單。多線程

PB線程模型

本來的PB線程,依賴於SharedObjectRegister,SharedObjectGet,SharedObjectUnRegister三個函數。依次創建Thread和Callback兩個nv對象。這使得多線程的使用開銷變得很大。異步

異步調用模型

咱們能夠參考一下Socket的異步模型,調用統一爲一個接口,返回時利用Event事件傳遞數據。async

好比以下接口:thread.of_execute("pb.f_func()"),做爲異步調用的惟一接口,在OnResult事件中接收數據。函數

這就提出了一個新問題:須要具有在Lua中調用PB的能力。性能

 

PB的CALLBACK模型

 在腳本腳言中調用宿主程序,須要設計Embed嵌入式CALLBACK接口。能夠充分利用LUA的動態特性,實現對象的惰性綁定。ui

 1 //============================================
 2 //對象調用說明
 3 
 4 //調用func函數
 5 obj.func(arg...)
 6 //調用指定sign簽名的func函數(解決重載函數調用)
 7 obj.func.call(sign, arg...)
 8 
 9 //調用evt事件
10 obj.evt.send(arg...)
11 //調用指定sign簽名的evt事件
12 obj.evt.sendto(sign, arg...)
13 
14 //屬性獲取
15 obj.prop.get()
16 //屬性設置    
17 obj.prop.set(val)
18 
19 //============================================
20 //全局變量訪問
21 
22 //全局變量var獲取
23 pb.global.var.get()
24 //全局變量var設置
25 pb.global.var.set(val)
26 
27 //shared變量var獲取
28 pb.classname.var.get()
29 //shared變量var設置
30 pb.classname.var.set(val)
31 
32 
33 //============================================
34 //全局與類函數訪問
35 
36 //調用全局func函數
37 pb.global.func(args...)
38 //調用指定sign簽名的func函數
39 pb.global.func.call(sign. arg...)
40 
41 //調用系統func函數
42 pb.system.func(args...)
43 //調用指定sign簽名的系統func函數
44 pb.system.func.call(sign, arg...)
45 
46 //調用classname類func函數
47 pb.classname.func(args...)
48 //調用指定sign簽名的func函數
49 pb.classname.func.call(sign, arg...)
50 
51 
52 //============================================
53 // 建立與銷燬
54 
55 //建立classname對象obj
56 pb.classname.obj.create(name)
57 //建立classname窗口win
58 pb.classname.win.open(name)
59 
60 //對象銷燬
61 obj.destroy()
62 //關閉窗口
63 obj.close()

PB的CALLBACK實例

 

異步調用實例

 只需一行代碼,實現多線程的異步調用:spa

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

 

順帶說一句,Lua(5000001那個結果)的執行速度還要在PB代碼之上,因此不會有什麼性能問題。.net

 

源碼: PowerPlumeDemoV0.2.1.rar
線程

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

<本節完>

相關文章
相關標籤/搜索