Thread
객체를 생성하거나 반환할 수 있습니다threading.Thread()
, threading.getThread()
, threading.mainThread()
, 그리고threading.currentThread()
.
이peekMessage()
함수는 스레드에서 메시지를 얻기 위해 사용됩니다.
이peekMessage()
function는 현재 스레드 객체와 연관된 스레드에 의해 수신된 메시지를 반환합니다.
문자열, 숫자, bool, 객체, 배열, null 값 및 시스템에서 지원되는 다른 유형
peekMessage() peekMessage (시간 정지)
매개 변수timeout
timeout 설정입니다. 매개 변수에서 설정한 밀리초 수를 차단하고 대기하여 데이터를 반환합니다. 데이터가 없으면 타임아웃이 한계를 초과하면 null 값이 반환됩니다.timeout
0으로 설정되거나timeout
매개 변수가 전달되지 않는 경우, 그것은 프로세스가 차단하고 채널에서 데이터가 수신 될 때까지 기다린다는 것을 의미합니다.timeout
-1로 설정되면 프로세스가 즉시 데이터를 차단하고 반환하지 않는다는 것을 의미합니다. 데이터가 없으면 null 값이 반환됩니다.
타임아웃 거짓 번호
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 postMessage():", i)
threading.mainThread().postMessage(i)
Sleep(500)
}
})
while (true) {
var msg = threading.currentThread().peekMessage()
Log("main peekMessage():", msg)
if (msg == 9) {
break
}
Sleep(1000)
}
t1.join()
}
동시 스레드에서 메인 스레드에 메시지를 보내십시오.
프로그램을 작성할 때 스레드 막상 문제들에 주목해야 합니다.
{@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/thread/join name}, {@Threads/Threads/eventLoop eventLoop}
이postMessage()
함수는 스레드에 메시지를 보내는데 사용됩니다.
postMessage ((msg)
매개 변수msg
이 메시지가 전달되어야 합니다.
msg 사실 문자열, 숫자, bool, 객체, 배열, 함수, null 값 등과 같은 시스템에서 지원되는 모든 유형
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 postMessage():", i)
threading.mainThread().postMessage(i)
Sleep(500)
}
})
for (var i = 0; i < 10; i++) {
var event = threading.mainThread().eventLoop()
Log("main event:", event)
Sleep(500)
}
t1.join()
}
동시 스레드에서 메시지를 전송하고 사용eventLoop()
메시지의 알림을 수신하기 위해
function main() {
threading.mainThread().postMessage(function(msg) {
Log("func from mainThread, msg:", msg)
})
threading.Thread(function() {
var func = threading.mainThread().peekMessage()
func("in " + threading.currentThread().name())
}).join()
}
함수 전송을 지원합니다.
스레드postMessage()
신호나 데이터를 보내기 위한 기능, 메시지 이벤트도 생성됩니다.eventLoop()
메시지 알림을 수신하는 기능.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Threads/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
이join()
이 함수는 스레드가 종료되고 시스템 리소스를 검색할 때까지 기다리기 위해 사용됩니다.
이ThreadRet
물체실행 결과에 대한 데이터를 포함합니다. 속성은 다음을 포함합니다:
ThreadRet
물체
합시다. join (타임오웃)
이timeout
패러미터는 스레드가 끝날 때까지 기다리는 밀리 초에 타임아웃을 설정하는 데 사용됩니다.timeout
매개 변수가 0으로 설정되거나timeout
매개 변수가 설정되지 않은 경우,join()
이 함수는 스레드가 실행을 마칠 때까지 기다립니다.timeout
매개 변수가 -1로 설정되면,join()
기능이 즉시 회복됩니다.
타임아웃 거짓 번호
function main() {
var t1 = threading.Thread(function() {
Log("Hello thread1")
Sleep(5000)
})
var ret = t1.join(1000)
Log("ret:", ret) // ret: undefined
ret = t1.join()
Log("ret:", ret) // ret: {"id":1,"terminated":false,"elapsed":5003252000}
}
테스트join()
타임아웃 함수와 반환 값을 출력합니다.
이join()
함수 출구 및 반환 시간undefined
.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
이terminate()
이 함수는 스레드를 강제로 종료하고 생성된 스레드가 사용하는 하드웨어 자원을 풀어주는 데 사용됩니다.
종료 (()
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 10; i++) {
Log("thread1 i:", i)
Sleep(1000)
}
})
Sleep(3000)
t1.terminate()
Log("after t1.terminate()")
while (true) {
LogStatus(_D())
Sleep(1000)
}
}
스레드의 실행을 강제로 종료합니다. 스레드를 강제로 종료한 후에는 이 스레드의 출력이 로그에 없을 것입니다.
가닥에 의해 강제로 종료되는 가닥에 대한terminate()
기능, 우리는 더 이상 사용할 수 없습니다join()
그 기능이 종료될 때까지 기다립니다.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
이getData()
이 함수는 스레드 환경에서 기록된 변수에 액세스하는 데 사용됩니다. 스레드가 스레드를 실행하지 않았을 때 데이터가 유효합니다.join()
기능 (출출 성공을 기다리고) 를 실행하지 않았습니다terminate()
함수 (강력으로 스레드를 끝내는 것)
이getData()
함수는key
현재 스레드 컨텍스트에 저장된 키-값 쌍의 매개 변수
문자열, 숫자, bool, 객체, 배열, null 값 및 시스템에서 지원되는 다른 유형
getData (데이터) getData (키)
이key
매개 변수는 저장된 키값 쌍의 키 이름입니다.
키 사실 문자열
function main() {
var t1 = threading.Thread(function() {
for (var i = 0; i < 5; i++) {
threading.currentThread().setData("count", i)
Log(`setData("count"):`, i)
Sleep(1000)
}
})
for (var i = 0; i < 5; i++) {
var count = threading.getThread(t1.id()).getData("count")
Log(`getData("count"):`, count)
Sleep(1000)
}
t1.join()
}
키의 값을 기록합니다count
동시 스레드 환경에서, 그리고 그 다음 키 값을 읽습니다count
주요 내용입니다.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name}, {@fun/Threads/Thread/eventLoop eventLoop}
이setData()
함수는 스레드 컨텍스트의 변수를 저장하는 데 사용됩니다.
setData (키, 값)
이key
매개 변수는 저장된 키-값 쌍의 키 이름을 지정하는 데 사용됩니다.
키
사실
문자열
의value
매개 변수는 저장된 키와 값 쌍의 키 값을 지정하는 데 사용됩니다.
가치 사실 문자열, 숫자, bool, 객체, 배열, 함수, null 값 등과 같은 시스템에서 지원되는 모든 유형
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Sleep(1000)
Log(`t1.getData("data"):`, t1.getData("data"))
t1.join()
}
동시 스레드에서 키-값 쌍을 설정하고 메인 스레드에서 키-값 쌍을 읽습니다.
function main() {
threading.mainThread().setData("func2", function(p) {
Log("func2 p:", p)
})
var t1 = threading.Thread(function() {
threading.currentThread().setData("func1", function(p) {
Log("func1 p:", p)
})
var func2 = threading.mainThread().getData("func2")
func2("test2")
})
Sleep(1000)
var func1 = t1.getData("func1")
func1("test1")
t1.join()
}
키값을 함수로 전달하는 것을 지원합니다.
스레드가 실행되지 않은 경우 데이터가 유효합니다.join()
기능 (출출 성공을 기다리고) 를 실행하지 않았습니다terminate()
함수 (강제로 스레드를 종료). 매개 변수의 값value
일련화 가능한 변수여야 합니다.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Thread/name name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
이id()
함수를 반환하는 데 사용됩니다threadId
현재 멀티 스레드 객체 인스턴스
이 값의 반환 값은id()
함수는threadId
.
번호
id()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.id():`, t1.id())
t1.join()
}
동시 실행 스레드를 만들고 출력threadId
이 동행 스레드의 주 스레드.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData set}, {@fun/Threads/Threads/Thread/name name}, {@fun/Threads/Threads/Thread/eventLoop eventLoop}
이name()
이 함수는 현재 멀티 스레드 객체 인스턴스의 이름을 반환하는 데 사용됩니다.
이name()
함수는 동시 스레드 이름을 반환합니다.
문자열
이름 (()
function main() {
var t1 = threading.Thread(function() {
threading.currentThread().setData("data", 100)
})
Log(`t1.name():`, t1.name()) // t1.name(): Thread-1
t1.join()
}
동시 스레드를 만들고 메인 스레드에서 동시 스레드의 이름을 출력합니다.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Thread/setData set}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/thread/eventLoop eventLoop}
이eventLoop()
이 함수는 스레드에서 수신되는 이벤트를 듣기 위해 사용됩니다.
이eventLoop()
함수는 현재 스레드에 의해 수신된 이벤트 정보를 반환합니다. 참조이벤트 정보 구조.
객체, null 값
이벤트 루프 (eventLoop) 이벤트 루프 (타임아웃)
매개 변수timeout
이 매개 변수에서timeout
0으로 설정되면, 반환하기 전에 이벤트가 발생하기를 기다립니다. 0보다 크다면, 이벤트 대기 타임 아웃을 설정합니다. 0보다 작다면, 가장 최근의 이벤트를 즉시 반환합니다.
타임아웃 거짓 번호
function main() {
var t1 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop() // Blocking wait
// 2024-11-14 10:14:18 thread1 eventMsg: {"Seq":1,"Event":"thread","ThreadId":0,"Index":1,"Queue":0,"Nano":1731550458699947000}
Log(_D(), "thread1 eventMsg:", eventMsg)
}
})
var t2 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop(-1) // Return immediately
Log(_D(), "thread2 eventMsg:", eventMsg)
Sleep(5000)
}
})
var t3 = threading.Thread(function() {
while (true) {
var eventMsg = threading.currentThread().eventLoop(3000) // Set a 3 second timeout
Log(_D(), "thread3 eventMsg:", eventMsg)
}
})
t1.postMessage("Hello ", t1.name())
t2.postMessage("Hello ", t2.name())
t3.postMessage("Hello ", t3.name())
t1.join()
t2.join()
t3.join()
}
동시에 세 개의 스레드를 실행하고 수신된 이벤트 정보를 출력합니다. 타임 아웃이 발생하거나 함수가 즉시 반환되면 출력 값은 null입니다.
그 처리 메커니즘은eventLoop()
함수는 전체 함수와 같습니다EventLoop()
.
{@fun/Threads/Thread/peekMessage peekMessage}, {@fun/Threads/Thread/postMessage postMessage}, {@fun/Threads/Thread/join join}, {@fun/Threads/Thread/terminate terminate}, {@fun/Threads/Thread/getData getData}, {@fun/Threads/Threads/setData setData}, {@fun/Threads/Thread/id id}, {@fun/Threads/Threads/Thread/name name},
스레딩 스레드 잠금