SCADA脚本中支持了 在脚本中定义多线程, 本文演示了一个SCADA最简单的多线程例子, 以方便大家对 SCADA脚本多线程有基本了解.
例子描述:
本例子在页面加载 SCADA脚本加载时候, 启动了一个1000毫秒的 timer, 用于调试窗体输出全局变量($count).
参见:
方法: testTimer()
另在脚本加载时候, 利用ScadaWnd的 创建线程的API: asynRunScript() 创建一个后台线程, 对全局变量($count)每 500毫秒做一次加1.
参见:
$$scadaWnd->asynRunScript( "testThread() ;" ) ;
方法: testThread()
本文是最简单的演示 SCADA脚本中, 多线程例子.
--------------------------------------------------------------------------------------------------------------
原理介绍和解析:
ScadaWnd保留了一个所管理的线程队列, 当ScadaWnd脚本被关闭时候( 窗体关闭或者停止当前页面 ), ScadaWnd会自动杀掉所管理线程
队列中的线程, 以保障安全. 所以完全不用担心 testThread()是 死循环以及其生命期.
--------------------------------------------------------------------------------------------------------------
完整 testthread.sca 代码如下:
1 $count = 0 ; 2 $$scadaWnd->setTimeout( 1000, "testTimer();" ) ; 3 $$scadaWnd->asynRunScript( "testThread() ;" ) ; 4 5 function testTimer() 6 { 7 extern $count ; 8 trace $count ; 9 10 extern $$scadaWnd ; 11 $$scadaWnd->setTimeout( 1000, "testTimer();" ) ; 12 13 } 14 15 function testThread() 16 { 17 extern $count ; 18 while( 1 ) 19 { 20 $count++ ; 21 sleep(500) ; 22 } 23 24 }
--------------------------------------------------------------------------------------------------------------
运行效果截图:
------------------------------------------------------------------------------------------------------------------------------------------------
另外后面文章将会讲解更多SCADA脚本中多线程例子, 包含讲解apl和SCADA脚本中 线程对象, 锁对象 以及事件对象.
如果有想了解更多APL技术平台的朋友请留言支持, 留下您的邮箱地址. 作者会在发布APL平台的时候通知阁下.