API Basic Timers ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

CreateTimer / script timers

ClassicUO โ€ข Basic

CreateTimer๋Š” ์ •์ง€ํ•œ ์ฝœ๋ฐฑ ํƒ€์ด๋จธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Start๋Š” ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์Šค๋ ˆ๋“œ์—์„œ Sub๋ฅผ ์˜ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ ํ™•์žฅ์€ ๊ฒฝ๊ณผ ์ดˆ๋ฅผ ์ฝ๋Š” Basic Timer()์™€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๊ตฌ๋ฌธ

CreateTimer(milliseconds, handler) -> Object (ScriptTimer)
CreateTimer(milliseconds, handler, repeating) -> Object (ScriptTimer)
timer.Start() -> Unit
timer.Stop() -> Unit
timer.Dispose() -> Unit
timer.Enabled() -> Integer (0/1)
timer.Interval() -> Integer (ms)
timer.SetInterval(milliseconds) -> Unit
Using timer ... End Using

๋งค๊ฐœ๋ณ€์ˆ˜

  • milliseconds โ€” milliseconds๋Š” 1..2147483647 ๋ฒ”์œ„์˜ Integer ๋ฐ€๋ฆฌ์ดˆ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด, ์†Œ์ˆ˜, 0, ์Œ์ˆ˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. SetInterval๋„ ๊ฐ™์€ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. Interval()์€ ์„ค์ •ํ•œ ๊ฐ„๊ฒฉ์ด์ง€ ๋‚จ์€ ์‹œ๊ฐ„์ด ์•„๋‹™๋‹ˆ๋‹ค.
  • handler โ€” ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ณ ์œ ํ•œ Sub์˜ AddressOf ๋˜๋Š” ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฝœ๋ฐฑ ๋ณ€์ˆ˜/ํŒฉํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. Function, Optional/ParamArray, ์ด๋ฆ„ ๋ฌธ์ž์—ด, ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์ฐธ์กฐ๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ์ƒํƒœ๋Š” Module ํ•„๋“œ์— ์ €์žฅํ•˜๋ฉฐ ์ง€์—ญ ํด๋กœ์ €๋Š” ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • repeating โ€” ์„ ํƒ์ ์ธ ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜: True/1์€ ๋ฐ˜๋ณต, False/0์€ ํ•œ ๋ฒˆ ์‹คํ–‰์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ True์ด๋ฉฐ ์ด๋ฆ„ ์žˆ๋Š” ์ธ์ˆ˜๋Š” repeating:=์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ˆซ์ž์™€ ๋ฌธ์ž์—ด์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ผํšŒ์„ฑ ํƒ€์ด๋จธ๋Š” ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.
  • timer / Start / Stop / Dispose / SetInterval โ€” ๋ฉ”์„œ๋“œ: Start, Stop, Dispose, Enabled, Interval, SetInterval(milliseconds). ํ™œ์„ฑ ํƒ€์ด๋จธ์˜ Start๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Stop ํ›„ Startํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SetInterval์€ ํ™œ์„ฑ ์ƒํƒœ์ด๋ฉด ์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹ค์‹œ ์„ธ๊ณ , ์ •์ง€ ์ƒํƒœ์ด๋ฉด ์ •์ง€๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Dispose๋Š” ๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์˜๊ตฌ ํ•ด์ œ์ด๋ฉฐ ์ดํ›„ Start/SetInterval์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. Using์€ ์ข…๋ฃŒ ์‹œ ์บก์ฒ˜ํ•œ ๊ฐ์ฒด๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ํ™˜๊ฐ’

CreateTimer๋Š” Object(ScriptTimer)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์•„์ดํ…œ ID๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Start/Stop/Dispose/SetInterval์€ Unit์ž…๋‹ˆ๋‹ค. Enabled๋Š” Integer 1=True ๋˜๋Š” 0=False๋กœ ๋‘˜ ๋‹ค ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Interval์€ ๋ฐ€๋ฆฌ์ดˆ์ด๋ฉฐ Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ์ œ ๊ฒฐ๊ณผ๋Š” String "3:0", "ready:0", "tick failed:0"์ž…๋‹ˆ๋‹ค.

๋™์ž‘

  • ๋ช…๋ น ์‚ฌ์ด์™€ Basic Wait/Sleep ๋ฐ Wait Until ์•ˆ์—์„œ ๋‹จ์กฐ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ํƒ€์ด๋จธ๊ฐ€ ์žˆ์œผ๋ฉด Wait๋ฅผ ์ตœ๋Œ€25๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๊ฒŒ์ž„ API๋‚˜ ๋‹ค๋ฅธ ์ฐจ๋‹จ ๋„ค์ดํ‹ฐ๋ธŒ ํ˜ธ์ถœ์€ ๋จผ์ € ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์ •๋ฐ€๋„๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ธฐํ•œ์ˆœ, ๊ฐ™์œผ๋ฉด ์ƒ์„ฑ์ˆœ์ด๋ฉฐ ๊ฒ€์‚ฌ๋‹น ์ตœ๋Œ€64๊ฐœ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‹ค์Œ ๊ฒ€์‚ฌ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์—์„œ๋Š” Wait๋ฅผ ์จ๋„ ๋‹ค๋ฅธ ํƒ€์ด๋จธ๊ฐ€ ์žฌ์ง„์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ๊ฐ„๊ฒฉ์€ ์™„๋ฃŒ ํ›„ ์‹œ์ž‘ํ•˜๋ฉฐ ๋†“์นœ ํšŸ์ˆ˜๋Š” ์Œ“์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ์‹œ์ •์ง€๋Š” ํ˜ธ์ถœ์„ ๋ฉˆ์ถ”๊ณ  ์žฌ๊ฐœ ์‹œ ์ง€์—ฐ๋œ ํƒ€์ด๋จธ๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฒ˜๋ฆฌ๊ธฐ ์˜ค๋ฅ˜๋Š” ํƒ€์ด๋จธ๋ฅผ ๋„๊ณ  ํ˜ธ์ถœ์ž์˜ Catch/Finally๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์˜ Stop/SetInterval์€ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋น„์ƒ์ •์ง€๋Š” ์ผ๋ฐ˜ Catch๊ฐ€ ์‚ผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ์‹คํ–‰์˜ ์ข…๋ฃŒยท์˜ค๋ฅ˜ยท์ •์ง€๋Š” ๋ชจ๋“  ํƒ€์ด๋จธ๋ฅผ ํ•ด์ œํ•˜๋ฉฐ ์žฌ์‹คํ–‰/์žฌ๋กœ๋“œ ์‹œ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IDE๋งŒ ๋‹ซ์œผ๋ฉด ์‹คํ–‰ ์ค‘ ์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ด๋จธ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋ฏธํ•ด์ œ ํƒ€์ด๋จธ๋Š” ์ตœ๋Œ€1024๊ฐœ์ด๋ฉฐ Dispose๊ฐ€ ์ž๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • RunThreePulses์™€ GetHandler๋Š” ์ „์ฒด ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์˜ˆ์ œ ๋ณด์กฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ CreateTimer๋Š” ์ธ์ˆ˜์™€ ์†Œ์œ ์ž๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  Start๋Š” ๊ธฐํ•œ์„ ๊ธฐ๋กํ•˜๋ฉฐ Pump๋Š” Sub๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Fire๋Š” ์™„๋ฃŒ ํ›„ ๋‹ค์Œ ๊ธฐํ•œ์„ ์„ค์ •ํ•˜๊ณ  Release๋Š” ๋ฃจํŠธ ์‹คํ–‰ ์ข…๋ฃŒ ์‹œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ ํ›„ ๋…๋ฆฝ ์„œ๋น„์Šค๋Š” ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ

1. ์„ธ ๋ฒˆ ํ˜ธ์ถœ ํ›„ ์ •๋ฆฌ

# RunThreePulses๋Š”20๋ฐ€๋ฆฌ์ดˆ์™€ ๊ธฐ๋ณธ repeating=True๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CountPulse๋Š” State.count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ 3์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. Wait Until์€3000๋ฐ€๋ฆฌ์ดˆ ์ œํ•œ์œผ๋กœ ์ƒํƒœ์™€ ํƒ€์ด๋จธ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. Enabled()=0์ด๋ฏ€๋กœ "3:0"์ž…๋‹ˆ๋‹ค. Returnํ•ด๋„ Using์ด ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Module State
    Public Dim count As Integer = 0
    Public Dim pulse
End Module

Sub CountPulse()
    State.count += 1
    If State.count >= 3 Then
        State.pulse.Stop()
    End If
End Sub

Function RunThreePulses() As String
    State.pulse = CreateTimer(20, AddressOf CountPulse)
    Using State.pulse
        State.pulse.Start()
        Wait Until State.count >= 3 Timeout 3000
        Return CStr(State.count) & ":" & CStr(State.pulse.Enabled())
    End Using
End Function

Sub Main()
    Return RunThreePulses()
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

RunThreePulses๋Š”20๋ฐ€๋ฆฌ์ดˆ์™€ ๊ธฐ๋ณธ repeating=True๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CountPulse๋Š” State.count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ 3์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. Wait Until์€3000๋ฐ€๋ฆฌ์ดˆ ์ œํ•œ์œผ๋กœ ์ƒํƒœ์™€ ํƒ€์ด๋จธ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. Enabled()=0์ด๋ฏ€๋กœ "3:0"์ž…๋‹ˆ๋‹ค. Returnํ•ด๋„ Using์ด ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

2. ์ด๋ฆ„ ์žˆ๋Š” ์ธ์ˆ˜์™€ ์ผํšŒ์„ฑ ํ˜ธ์ถœ

# GetHandler๋Š” AddressOf SetReady๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„ ์žˆ๋Š” ์ธ์ˆ˜๋Š”5๋ฐ€๋ฆฌ์ดˆ, callback, repeating=False์ž…๋‹ˆ๋‹ค. SetInterval์ด Start ์ „์—10์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. SetReady๊ฐ€ "ready"๋ฅผ ์ €์žฅํ•  ๋•Œ ํƒ€์ด๋จธ๋Š” ์ด๋ฏธ ๊บผ์กŒ์Šต๋‹ˆ๋‹ค. Main์€ ์ตœ๋Œ€3000๋ฐ€๋ฆฌ์ดˆ ๊ธฐ๋‹ค๋ฆฌ๊ณ  "ready:0"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณด์กฐ ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
Option Explicit On
Module State
    Public Dim message As String = ""
End Module

Sub SetReady()
    State.message = "ready"
End Sub

Function GetHandler()
    Return AddressOf SetReady
End Function

Sub Main()
    Dim callback = GetHandler()
    Dim notice = CreateTimer(repeating:=False, handler:=callback, milliseconds:=5)
    Using notice
        notice.SetInterval(10)
        notice.Start()
        Wait Until State.message = "ready" Timeout 3000
        Return State.message & ":" & CStr(notice.Enabled())
    End Using
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

GetHandler๋Š” AddressOf SetReady๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„ ์žˆ๋Š” ์ธ์ˆ˜๋Š”5๋ฐ€๋ฆฌ์ดˆ, callback, repeating=False์ž…๋‹ˆ๋‹ค. SetInterval์ด Start ์ „์—10์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. SetReady๊ฐ€ "ready"๋ฅผ ์ €์žฅํ•  ๋•Œ ํƒ€์ด๋จธ๋Š” ์ด๋ฏธ ๊บผ์กŒ์Šต๋‹ˆ๋‹ค. Main์€ ์ตœ๋Œ€3000๋ฐ€๋ฆฌ์ดˆ ๊ธฐ๋‹ค๋ฆฌ๊ณ  "ready:0"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ณด์กฐ ํ•จ์ˆ˜๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

3. Wait ์ค‘ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

# FailingPulse๊ฐ€ "tick failed"๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค. 5๋ฐ€๋ฆฌ์ดˆ ํƒ€์ด๋จธ๊ฐ€ Wait(2000) ์•ˆ์—์„œ ์‹คํ–‰๋˜๊ณ  ๊บผ์ง€๋ฉฐ ๋Œ€๊ธฐ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. Catch๋Š” ๋ฌธ์ž์—ด๊ณผ Enabled()=0์„ ์ €์žฅํ•˜๊ณ  Finally๊ฐ€ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. "tick failed:0"์€ ๋ฉ”์‹œ์ง€์™€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋น„์ƒ์ •์ง€๋Š” ์—”์ง„์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
Option Explicit On
Sub FailingPulse()
    Throw "tick failed"
End Sub

Sub Main()
    Dim pulse = CreateTimer(5, AddressOf FailingPulse)
    Dim problemText As String = ""
    Dim enabledAfterError As Boolean = True
    Try
        pulse.Start()
        Wait(2000)
    Catch problem
        problemText = problem
        enabledAfterError = pulse.Enabled()
    Finally
        pulse.Dispose()
    End Try
    Return problemText & ":" & CStr(enabledAfterError)
End Sub

๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ ์‹คํ–‰ ์„ค๋ช…:

FailingPulse๊ฐ€ "tick failed"๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค. 5๋ฐ€๋ฆฌ์ดˆ ํƒ€์ด๋จธ๊ฐ€ Wait(2000) ์•ˆ์—์„œ ์‹คํ–‰๋˜๊ณ  ๊บผ์ง€๋ฉฐ ๋Œ€๊ธฐ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. Catch๋Š” ๋ฌธ์ž์—ด๊ณผ Enabled()=0์„ ์ €์žฅํ•˜๊ณ  Finally๊ฐ€ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. "tick failed:0"์€ ๋ฉ”์‹œ์ง€์™€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋น„์ƒ์ •์ง€๋Š” ์—”์ง„์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ํ•จ์ˆ˜: ํ˜ธ์ถœ๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๊นŒ์ง€

RunThreePulses์™€ GetHandler๋Š” ์ „์ฒด ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์˜ˆ์ œ ๋ณด์กฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ CreateTimer๋Š” ์ธ์ˆ˜์™€ ์†Œ์œ ์ž๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  Start๋Š” ๊ธฐํ•œ์„ ๊ธฐ๋กํ•˜๋ฉฐ Pump๋Š” Sub๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. Fire๋Š” ์™„๋ฃŒ ํ›„ ๋‹ค์Œ ๊ธฐํ•œ์„ ์„ค์ •ํ•˜๊ณ  Release๋Š” ๋ฃจํŠธ ์‹คํ–‰ ์ข…๋ฃŒ ์‹œ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ์ข…๋ฃŒ ํ›„ ๋…๋ฆฝ ์„œ๋น„์Šค๋Š” ๋‚จ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

1. CreateTimer

milliseconds๋Š” 1..2147483647 ๋ฒ”์œ„์˜ Integer ๋ฐ€๋ฆฌ์ดˆ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด, ์†Œ์ˆ˜, 0, ์Œ์ˆ˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. SetInterval๋„ ๊ฐ™์€ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. Interval()์€ ์„ค์ •ํ•œ ๊ฐ„๊ฒฉ์ด์ง€ ๋‚จ์€ ์‹œ๊ฐ„์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ „ํ˜€ ์—†๋Š” ๊ณ ์œ ํ•œ Sub์˜ AddressOf ๋˜๋Š” ํ˜„์žฌ ์Šคํฌ๋ฆฝํŠธ์˜ ์ฝœ๋ฐฑ ๋ณ€์ˆ˜/ํŒฉํ„ฐ๋ฆฌ์ž…๋‹ˆ๋‹ค. Function, Optional/ParamArray, ์ด๋ฆ„ ๋ฌธ์ž์—ด, ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ ์ฐธ์กฐ๋Š” ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ์ƒํƒœ๋Š” Module ํ•„๋“œ์— ์ €์žฅํ•˜๋ฉฐ ์ง€์—ญ ํด๋กœ์ €๋Š” ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ ํƒ์ ์ธ ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜: True/1์€ ๋ฐ˜๋ณต, False/0์€ ํ•œ ๋ฒˆ ์‹คํ–‰์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ True์ด๋ฉฐ ์ด๋ฆ„ ์žˆ๋Š” ์ธ์ˆ˜๋Š” repeating:=์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ˆซ์ž์™€ ๋ฌธ์ž์—ด์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์ผํšŒ์„ฑ ํƒ€์ด๋จธ๋Š” ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.

CreateTimer๋Š” Object(ScriptTimer)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ ์•„์ดํ…œ ID๋‚˜ ์Šคํฌ๋ฆฝํŠธ ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. Start/Stop/Dispose/SetInterval์€ Unit์ž…๋‹ˆ๋‹ค. Enabled๋Š” Integer 1=True ๋˜๋Š” 0=False๋กœ ๋‘˜ ๋‹ค ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Interval์€ ๋ฐ€๋ฆฌ์ดˆ์ด๋ฉฐ Boolean์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ์ œ ๊ฒฐ๊ณผ๋Š” String "3:0", "ready:0", "tick failed:0"์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.Timers.cs; ํ•จ์ˆ˜ CreateTimer.

2. Start

๋ฉ”์„œ๋“œ: Start, Stop, Dispose, Enabled, Interval, SetInterval(milliseconds). ํ™œ์„ฑ ํƒ€์ด๋จธ์˜ Start๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Stop ํ›„ Startํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SetInterval์€ ํ™œ์„ฑ ์ƒํƒœ์ด๋ฉด ์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹ค์‹œ ์„ธ๊ณ , ์ •์ง€ ์ƒํƒœ์ด๋ฉด ์ •์ง€๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Dispose๋Š” ๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์˜๊ตฌ ํ•ด์ œ์ด๋ฉฐ ์ดํ›„ Start/SetInterval์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. Using์€ ์ข…๋ฃŒ ์‹œ ์บก์ฒ˜ํ•œ ๊ฐ์ฒด๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

Due = now + interval; enabled = true;

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/ScriptTimerObject.cs; ํ•จ์ˆ˜ Start.

3. WaitWithTimers

๋ช…๋ น ์‚ฌ์ด์™€ Basic Wait/Sleep ๋ฐ Wait Until ์•ˆ์—์„œ ๋‹จ์กฐ ๊ฒฝ๊ณผ ์‹œ๊ฐ„์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ™œ์„ฑ ํƒ€์ด๋จธ๊ฐ€ ์žˆ์œผ๋ฉด Wait๋ฅผ ์ตœ๋Œ€25๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๊ฒŒ์ž„ API๋‚˜ ๋‹ค๋ฅธ ์ฐจ๋‹จ ๋„ค์ดํ‹ฐ๋ธŒ ํ˜ธ์ถœ์€ ๋จผ์ € ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์‹œ๊ฐ„ ์ •๋ฐ€๋„๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ƒˆ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

checkpoint -> Pump -> min(remaining, nextDue, 25 ms) -> Wait

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/Interpreter.Timers.cs; ํ•จ์ˆ˜ WaitWithTimers.

4. Pump

๊ธฐํ•œ์ˆœ, ๊ฐ™์œผ๋ฉด ์ƒ์„ฑ์ˆœ์ด๋ฉฐ ๊ฒ€์‚ฌ๋‹น ์ตœ๋Œ€64๊ฐœ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋‹ค์Œ ๊ฒ€์‚ฌ์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์—์„œ๋Š” Wait๋ฅผ ์จ๋„ ๋‹ค๋ฅธ ํƒ€์ด๋จธ๊ฐ€ ์žฌ์ง„์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ณต ๊ฐ„๊ฒฉ์€ ์™„๋ฃŒ ํ›„ ์‹œ์ž‘ํ•˜๋ฉฐ ๋†“์นœ ํšŸ์ˆ˜๋Š” ์Œ“์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ์‹œ์ •์ง€๋Š” ํ˜ธ์ถœ์„ ๋ฉˆ์ถ”๊ณ  ์žฌ๊ฐœ ์‹œ ์ง€์—ฐ๋œ ํƒ€์ด๋จธ๋ฅผ ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

snapshot -> deadline / sequence -> checkpoint -> Fire; limit = 64

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/ScriptTimerScheduler.cs; ํ•จ์ˆ˜ Pump.

5. Fire

์ฒ˜๋ฆฌ๊ธฐ ์˜ค๋ฅ˜๋Š” ํƒ€์ด๋จธ๋ฅผ ๋„๊ณ  ํ˜ธ์ถœ์ž์˜ Catch/Finally๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์˜ Stop/SetInterval์€ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋น„์ƒ์ •์ง€๋Š” ์ผ๋ฐ˜ Catch๊ฐ€ ์‚ผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ์‹คํ–‰์˜ ์ข…๋ฃŒยท์˜ค๋ฅ˜ยท์ •์ง€๋Š” ๋ชจ๋“  ํƒ€์ด๋จธ๋ฅผ ํ•ด์ œํ•˜๋ฉฐ ์žฌ์‹คํ–‰/์žฌ๋กœ๋“œ ์‹œ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IDE๋งŒ ๋‹ซ์œผ๋ฉด ์‹คํ–‰ ์ค‘ ์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ด๋จธ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋ฏธํ•ด์ œ ํƒ€์ด๋จธ๋Š” ์ตœ๋Œ€1024๊ฐœ์ด๋ฉฐ Dispose๊ฐ€ ์ž๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

callback -> completion -> next Due; error -> disabled -> throw

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/ScriptTimerObject.cs; ํ•จ์ˆ˜ Fire.

6. Dispose

๋ฉ”์„œ๋“œ: Start, Stop, Dispose, Enabled, Interval, SetInterval(milliseconds). ํ™œ์„ฑ ํƒ€์ด๋จธ์˜ Start๋Š” ์•„๋ฌด๊ฒƒ๋„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Stop ํ›„ Startํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SetInterval์€ ํ™œ์„ฑ ์ƒํƒœ์ด๋ฉด ์ง€๊ธˆ๋ถ€ํ„ฐ ๋‹ค์‹œ ์„ธ๊ณ , ์ •์ง€ ์ƒํƒœ์ด๋ฉด ์ •์ง€๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. Dispose๋Š” ๋ฐ˜๋ณต ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์˜๊ตฌ ํ•ด์ œ์ด๋ฉฐ ์ดํ›„ Start/SetInterval์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. Using์€ ์ข…๋ฃŒ ์‹œ ์บก์ฒ˜ํ•œ ๊ฐ์ฒด๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

Release -> scheduler.Remove -> Changed

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/ObjectTypes/ScriptTimerObject.cs; ํ•จ์ˆ˜ Dispose.

7. Release

์ฒ˜๋ฆฌ๊ธฐ ์˜ค๋ฅ˜๋Š” ํƒ€์ด๋จธ๋ฅผ ๋„๊ณ  ํ˜ธ์ถœ์ž์˜ Catch/Finally๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๊ธฐ ์•ˆ์˜ Stop/SetInterval์€ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋น„์ƒ์ •์ง€๋Š” ์ผ๋ฐ˜ Catch๊ฐ€ ์‚ผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์ƒ์œ„ ์‹คํ–‰์˜ ์ข…๋ฃŒยท์˜ค๋ฅ˜ยท์ •์ง€๋Š” ๋ชจ๋“  ํƒ€์ด๋จธ๋ฅผ ํ•ด์ œํ•˜๋ฉฐ ์žฌ์‹คํ–‰/์žฌ๋กœ๋“œ ์‹œ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. IDE๋งŒ ๋‹ซ์œผ๋ฉด ์‹คํ–‰ ์ค‘ ์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ด๋จธ๋Š” ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋ฏธํ•ด์ œ ํƒ€์ด๋จธ๋Š” ์ตœ๋Œ€1024๊ฐœ์ด๋ฉฐ Dispose๊ฐ€ ์ž๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

timer.Release for each handle -> timers.Clear -> no pending deadline

ํ”„๋กœ์ ํŠธ ์†Œ์Šค: external/InjectionScript/src/InjectionScript/Runtime/ScriptTimerScheduler.cs; ํ•จ์ˆ˜ Release.

RunThreePulses๋Š”20๋ฐ€๋ฆฌ์ดˆ์™€ ๊ธฐ๋ณธ repeating=True๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. CountPulse๋Š” State.count๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ 3์—์„œ ๋ฉˆ์ถฅ๋‹ˆ๋‹ค. Wait Until์€3000๋ฐ€๋ฆฌ์ดˆ ์ œํ•œ์œผ๋กœ ์ƒํƒœ์™€ ํƒ€์ด๋จธ๋ฅผ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. Enabled()=0์ด๋ฏ€๋กœ "3:0"์ž…๋‹ˆ๋‹ค. Returnํ•ด๋„ Using์ด ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.


en ยท ru ยท uk ยท fr ยท de ยท it ยท es ยท zh-tw ยท ja ยท ko

Basic