[JAVA] Timer, TimerTask, Thread 이용하기 - Engineer of NiagaraFramework

Tridium, NiagaraFramework, SCADA, HMI, PLC, Automation, SmartFAM etc.. About controls.
나이아가라 프레임워크 QnA : neverlikekami@gmail.com

2020년 10월 22일 목요일

[JAVA] Timer, TimerTask, Thread 이용하기

개요

10초 후에 A 값을 출력하고 B 값을 출력하고 싶을 때 프로그램 객체에서 이 코드를 사용할 수 있다.

Using Timer and TimerTask 

프로그래밍하기 전에 준비

import java.util.TimerTask


Source code

public void onExecute() {

    setAOValue(new BStatusNumeric(100));
    
Timer tmr = new Timer();
TimerTask tmr_task = new TimerTask()
{
    public void run()
    {
        //do it code
        setAOValue(new BStatusNumeric(200));
    }
}
tmr.schedule(tmr_task,5000);
//tmr.schedule(tmr_task,5000,2000) : Operative every two seconds, after 5 seconds.

}// end of onExecute()


결과

이 코드는 출력 100을 먼저 작동하고 5초 후에 출력 200을 출력한다.

스레드 사용

프로그래밍하기 전에 준비

nothing special.


Source code

public void onExecute() 

  throws Exception
{
  setNormal();
}


public void setNormal()
{
  // Create a new thread, with the starting point set as the current program  object.
  Thread thread = new Thread(this, getProgram().getName());
  
  // Start the thread
  thread.start();



public void run()
{
  // This task will take a long time
  {
    System.out.println("started task ["+Thread.currentThread().getName()+"]");
    setAO_01(new BStatusNumeric(11));
    setAO_02(new BStatusNumeric(22));
    setAO_03(new BStatusNumeric(33));
   
    try
    {
      Thread.sleep(10000);
          setAO_01(new BStatusNumeric(100));
          setAO_02(new BStatusNumeric(200));
          setAO_03(new BStatusNumeric(300));
      
    } catch (InterruptedException ie) {
      // Do nothing
      System.out.println(ie);
    }
    System.out.println("ended task ["+Thread.currentThread().getName()+"]");
  }


결과

이 코드는 각각 11,22,33을 먼저 출력하고 5초 후에 100,200,300을 출력한다.


댓글 없음:

댓글 쓰기

Post list