2.2.3  Tworzenie wątków

 

W przypadku stosowania metody wielu wątków wykorzystywana jest metoda CreateThread interfejsu IApplication. Możliwe jest utworzenie wielu wątków, które będą wykonywane niezależnie. Sposób działania wątków oraz ich wzajemna synchronizacja jest całkowicie dowolne – należy stosować metody synchronizacji udostępniane przez platformę .NET.

C#

using System;
using
 System.Windows.Forms;
using
 Askom.AsixEvo.Scripting;
 
 

public
 class ThreadDemo : IScript
{
   IApplication application;
   
public bool Initialize(string[] aParameters, IApplication aApplication)
   {
      application = aApplication;
 
      System.Threading.
Thread t1 = aApplication.CreateThread(ThreadFun);
      t1.Start();
 
      
return false;
   }
 
   
public void FinalizeScript()
   {
 
   }
 
   
void ThreadFun()
   {
      
while (true)
      {
         application.ReportMessage(EvoMessageType.Info, 
"Wykonano cykl pracy skryptu");
         application.Sleep(
TimeSpan.FromSeconds(1));
      }
   }
}
 

 

 

VB

Imports System
Imports
 System.Windows.Forms
Imports
 Askom.AsixEvo.Scripting
 

Public
 Class ThreadDemoVB
    
Implements IScript
 
    
Dim application As IApplication
    
Public Function Initialize(ByVal aParameters() As StringByVal aApplication As _

        IApplication) As Boolean Implements IScript.Initialize
 
        application = aApplication
        Dim t As System.Threading.Thread
        t = aApplication.CreateThread(AddressOf ThreadFun)
        t.Start()
        Return False
 
    End Function
 
    Public Sub FinalizeScript() Implements IScript.FinalizeScript
 
    End Sub
 
    Sub ThreadFun()
 
        While True
            application.ReportMessage(Askom.MessageLogging.MessageType.Warning, _

                                      "Wykonano cykl pracy skryptu")
            application.Sleep(TimeSpan.FromSeconds(1))
        End While
 
    End Sub
 
End
 Class 

 

W metodzie Initialize tworzony jest nowy wątek roboczy przy pomocy metody CreateThread. Jako funkcje wątku podano metodę ThreadFun. Po utworzeniu nowy wątek jest uruchamiany. Zwrócenie wartości false powoduje, że skrypt pozostanie załadowany w pamięci i wątek będzie mógł kontynuować pracę.

Uruchomienie wątku powoduje wywołanie metody ThreadFun. Główna funkcjonalność skryptu realizowana jest wewnątrz nieskończonej pętli typu While. Pomiędzy kolejnymi cyklami pracy następuje 1-sekundowa przerwa. Należy unikać tworzenia wątków, które działają bez żadnych przerw, ponieważ powoduje to nadmierne obciążenie pracy procesora.

Metodę niezależnych wątków należy stosować wtedy, gdy istnieje konieczność uruchomienia więcej niż jednego wątku. Pokazany przykład można byłoby prościej zaimplementować, stosując metodę nieskończonej pętli w metodzie Initialize.