API Basic WaitUntil ko - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
Wait Until / Timeout
ClassicUO โข Basic
Wait Until์ ์กฐ๊ฑด์ด ์ฐธ์ด ๋๊ฑฐ๋ ์ ํ ์๊ฐ์ด ๋๋ ๋๊น์ง ๋ฐ๋ณต ํ์ธํฉ๋๋ค. VB.NET ๋ฌธ์ด ์๋ Basic ํ์ฅ์ ๋๋ค. ํ์ฌ ์คํฌ๋ฆฝํธ์์ ์คํํ๋ฉฐ ์ ์ค๋ ๋๋ ๋ค๋ฅธ ํ๋ก์์ ๋ฅผ ์์ํ์ง ์์ต๋๋ค.
์ ํํ ๊ตฌ๋ฌธ
Wait Until condition Timeout milliseconds
๋งค๊ฐ๋ณ์
conditionโ condition์ ์ฆ์ ํ๊ฐํ๊ณ ์ดํ ์งง์ ๋๊ธฐ ์ฌ์ด์ ๋ค์ ํ๊ฐํฉ๋๋ค. Boolean ๋๋ ๋น๊ต์์ ์ฌ์ฉํ์ธ์. ์ซ์ 0์ false์ด๋ฉฐ ๋๋จธ์ง๋ If ๊ท์น์ ๋ฐ๋ฆ ๋๋ค. ๋ฌธ์์ด "false"๋ Boolean false๊ฐ ์๋๋๋ค. UO๋ ์ฌ์ฉ์ ํจ์๋ฅผ ํธ์ถํ ์ ์์ง๋ง ์ค๋ฅ๋ ์ ํ๋๊ณ ๋ถ์ ํจ๊ณผ๋ ๋งค ๊ฒ์ฌ๋ง๋ค ๋ฐ๋ณต๋ฉ๋๋ค.Timeout millisecondsโ Timeout์ ํ์์ ๋๋ค. milliseconds๋ ์ฒซ ๊ฒ์ฌ ์ ์ ํ ๋ฒ ํ๊ฐํ๋ฉฐ Integer 0..2147483647์ด์ด์ผ ํฉ๋๋ค. ์์, ์์, String์ ์กฐ๊ฑด ์คํ ์ ์ ์ค๋ฅ๋ฅผ ๋ ๋๋ค. 0์ ์ฆ์ ๊ฒ์ฌ๋ง ํ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์์น์์๋ timeout์ ์ผ๋ฐ ๋ณ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐํ๊ฐ
๋ฌธ ์์ฒด๋ ๊ฐ์ ๋ฐํํ์ง ์์ต๋๋ค. ์ฑ๊ณตํ๋ฉด ๋ค์ ์ค๋ก ์งํํ๊ณ ์๊ฐ ์ด๊ณผ๋ ํ์ผ๊ณผ ์ค์ด ํฌํจ๋ ์คํ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค. Try/Catch ๋๋ On Error๋ก ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ ์์ผ๋ฉด ํ์ฌ ์คํ์ด ์คํจํฉ๋๋ค. ์๋์ผ๋ก false๋ฅผ ๋ฐํํ์ง ์์ต๋๋ค. ์์ 2์์ True/1 ๋๋ False/0์ ๋ฐํํ๋ ํจ์๋ฅผ ์ง์ ๋ง๋ญ๋๋ค.
๋์
- ์์ง์ ์๊ฐ์ ์ ์ฅํ๊ณ ๋จ์กฐ ์ฆ๊ฐ Stopwatch๋ฅผ ์์ํฉ๋๋ค. ์ฒซ ์ฆ์ ๊ฒ์ฌ๋ ์ ํ์ด 0์ด์ด๋ ์ฑ๊ณตํ ์ ์์ต๋๋ค. false์ด๋ฉด ๋ฃจํ์์ ์ทจ์์ ์ผ์ ์ ์ง๋ฅผ ํ์ธํ๊ณ ๋จ์ ์๊ฐ์ ๊ณ์ฐํ ๋ค ์ต๋ 10๋ฐ๋ฆฌ์ด ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๊ฒ์ฌํฉ๋๋ค. ์ง์์ ์ธ ๋ฐ์ ๋ฃจํ๋ฅผ ํผํ๋ฉฐ ์ด์์ฒด์ ์ค์ผ์ค๋ง์ผ๋ก ๊ฐ๊ฒฉ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
- ์ผ์ ์ ์ง๋ ๊ฒ์ฌ๋ฅผ ๋ฉ์ถ์ง๋ง ์ค์ ๊ฒฝ๊ณผ ์๊ฐ์ ์ ํ์ ํฌํจ๋ฉ๋๋ค. ์ฌ๊ฐํ ๋ ๊ธฐํ์ด ์ง๋ฌ์ผ๋ฉด ๋ค์ ๊ฒ์ฌ ์ ์ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ค์ง๋ ๋๊ธฐ๋ฅผ ์ค๋จํ๊ณ ๋ค๋ฅธ ๊ธด๊ธ ์ทจ์์ฒ๋ผ ์คํฌ๋ฆฝํธ Catch/Finally๋ฅผ ๊ฑด๋๋๋๋ค. condition ์์์ ๋งํ ํธ์ถ์ ๊ฐ์ ๋ก ์ค๋จํ ์ ์์ผ๋ฏ๋ก ์กฐ๊ฑด ํจ์๋ ์งง๊ฒ ์ ์งํ์ธ์. ์์๋ ๊ฒ์ฌ๋ ๋๋ ๋ค ๊ฒฐ๊ณผ ๋๋ ์ค๋ฅ๊ฐ ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ์กฐ๊ฑด ์ค๋ฅ๋ฅผ ์๊ฐ ์ด๊ณผ๋ก ๋ฐ๊พธ์ง ์์ต๋๋ค. ์ผ๋ฐ ์ค๋ฅ์ ์๊ฐ ์ด๊ณผ๋ ํด๋น Finally๋ฅผ ์คํํฉ๋๋ค. ๋ณ์๋ ํ์ฌ ํธ์ถ์ ์ํ๋ฉฐ ๋ค์ ์ง์ ํ๋ฉด ์ ์ ํ ์๊ฐ์ ์์ํฉ๋๋ค. End Wait๋ ์ถ๊ฐ ๊ฒ์ฌ ๊ฐ๊ฒฉ ์ธ์๋ ์์ต๋๋ค. Wait(milliseconds)๋ ๋ณ๋์ ์ง์ฐ ํจ์๋ก ์ ์ง๋ฉ๋๋ค.
์์
1. ์๊ฐ ์ ํ ์์์ ํจ์ ํ์ธํ๊ธฐ
# checks๋ 0์ผ๋ก ์์ํฉ๋๋ค. Ready๊ฐ ByRef๋ก ๋ฐ์ ๋งค ๊ฒ์ฌ๋ง๋ค ์ฆ๊ฐ์ํค๋ฉฐ required=3์ ByVal์
๋๋ค. budget=5000์ ์ต๋ 5์ด์
๋๋ค. ์ฒซ ๋ ๊ฒ์ฌ๋ false, ์ธ ๋ฒ์งธ๋ true์ฌ์ Main์ Integer 3์ ๋ฐํํฉ๋๋ค. ์๋ฒ ์ฐ๊ฒฐ ๋ชจ์ ๊ตฌํ์ด ์๋ ๊ฒฐ์ ์ ์ธ ํด๋ง ์์ ์ด๋ฉฐ ์ค์ ํ์ํ ์ํ ์กฐ๊ฑด์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
Option Explicit On
Function Ready(ByRef checks As Integer, ByVal required As Integer) As Boolean
checks += 1
Return checks >= required
End Function
Sub Main()
Dim checks As Integer = 0
Const budget = 5000
Wait Until Ready(checks, 3) Timeout budget
Return checks
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
checks๋ 0์ผ๋ก ์์ํฉ๋๋ค. Ready๊ฐ ByRef๋ก ๋ฐ์ ๋งค ๊ฒ์ฌ๋ง๋ค ์ฆ๊ฐ์ํค๋ฉฐ required=3์ ByVal์ ๋๋ค. budget=5000์ ์ต๋ 5์ด์ ๋๋ค. ์ฒซ ๋ ๊ฒ์ฌ๋ false, ์ธ ๋ฒ์งธ๋ true์ฌ์ Main์ Integer 3์ ๋ฐํํฉ๋๋ค. ์๋ฒ ์ฐ๊ฒฐ ๋ชจ์ ๊ตฌํ์ด ์๋ ๊ฒฐ์ ์ ์ธ ํด๋ง ์์ ์ด๋ฉฐ ์ค์ ํ์ํ ์ํ ์กฐ๊ฑด์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
2. Boolean์ ๋ฐํํ๋ ํจ์ ๋ง๋ค๊ธฐ
# TryWait๋ ready=False์ budget=0์ ๋ฐ์ต๋๋ค. ์ฆ์ ๊ฒ์ฌ๊ฐ ์คํจํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋๊ณ Catch problem์ด Return False๋ฅผ ์คํํฉ๋๋ค. Main์ False์ ๋น๊ต ๊ฐ๋ฅํ 0์ ๋ฐํํฉ๋๋ค. ready=True๋ผ๋ฉด 1/True์
๋๋ค. ๋ชจ๋ ์คํ ์ค๋ฅ๋ฅผ ์ก์ผ๋ฏ๋ก ๊ตฌ๋ถํ๋ ค๋ฉด problem์ ํ์ธํ์ธ์. ready๋ Boolean ๊ฐ์ด๋ฉฐ ์ฝ๋ฐฑ ํจ์๊ฐ ์๋๋๋ค.
Option Explicit On
Function TryWait(ByVal ready As Boolean, ByVal budget As Integer) As Boolean
Try
Wait Until ready Timeout budget
Return True
Catch problem
Return False
End Try
End Function
Sub Main()
Dim success = TryWait(False, 0)
Return success
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
TryWait๋ ready=False์ budget=0์ ๋ฐ์ต๋๋ค. ์ฆ์ ๊ฒ์ฌ๊ฐ ์คํจํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋๊ณ Catch problem์ด Return False๋ฅผ ์คํํฉ๋๋ค. Main์ False์ ๋น๊ต ๊ฐ๋ฅํ 0์ ๋ฐํํฉ๋๋ค. ready=True๋ผ๋ฉด 1/True์ ๋๋ค. ๋ชจ๋ ์คํ ์ค๋ฅ๋ฅผ ์ก์ผ๋ฏ๋ก ๊ตฌ๋ถํ๋ ค๋ฉด problem์ ํ์ธํ์ธ์. ready๋ Boolean ๊ฐ์ด๋ฉฐ ์ฝ๋ฐฑ ํจ์๊ฐ ์๋๋๋ค.
3. ์กฐ๊ฑด ์ค๋ฅ๋ฅผ ๋ณด์กดํ๊ณ ๋ง๋ฌด๋ฆฌํ๊ธฐ
# CheckStatus๊ฐ state=-1์ ๋ฐ์ผ๋ฉด ์ฆ์ "disconnected"๋ฅผ ๋ฐ์์ํต๋๋ค. 3000๋ฐ๋ฆฌ์ด ์ ํ์ ์ค๋ฅ๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. Catch๋ problem์ message๋ก ๋ณต์ฌํ๊ณ Finally๋ finished=True/1๋ก ์ค์ ํฉ๋๋ค. Main์ "disconnected:1"์ ๋ฐํํฉ๋๋ค. state=1์ ์ฆ์ ์ฑ๊ณตํ๊ณ state=0์ ์๊ฐ ์ด๊ณผ๊น์ง false์
๋๋ค. ๊ฒ์ ์ฐ๊ฒฐ ์์ด ์คํ๋ฉ๋๋ค.
Option Explicit On
Function CheckStatus(ByVal state As Integer) As Boolean
If state < 0 Then
Throw "disconnected"
End If
Return state = 1
End Function
Sub Main()
Dim message = ""
Dim finished = False
Try
Wait Until CheckStatus(-1) Timeout 3000
Catch problem
message = problem
Finally
finished = True
End Try
Return message & ":" & CStr(finished)
End Sub
๋งค๊ฐ๋ณ์ ๋ฐ ์คํ ์ค๋ช :
CheckStatus๊ฐ state=-1์ ๋ฐ์ผ๋ฉด ์ฆ์ "disconnected"๋ฅผ ๋ฐ์์ํต๋๋ค. 3000๋ฐ๋ฆฌ์ด ์ ํ์ ์ค๋ฅ๋ฅผ ๋ฐ๊พธ์ง ์์ต๋๋ค. Catch๋ problem์ message๋ก ๋ณต์ฌํ๊ณ Finally๋ finished=True/1๋ก ์ค์ ํฉ๋๋ค. Main์ "disconnected:1"์ ๋ฐํํฉ๋๋ค. state=1์ ์ฆ์ ์ฑ๊ณตํ๊ณ state=0์ ์๊ฐ ์ด๊ณผ๊น์ง false์ ๋๋ค. ๊ฒ์ ์ฐ๊ฒฐ ์์ด ์คํ๋ฉ๋๋ค.