SCADA实例解析三--脚本中实现多线程例子一

     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平台的时候通知阁下.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2012-10-18 10:04  smartfish_liu  阅读(1700)  评论(0编辑  收藏  举报

导航