WorkerScript QML Type
Qt Quick 애플리케이션에서 스레드를 사용할 수 있게 합니다. 더 보기...
| Import Statement: | import QtQml.WorkerScript |
속성
신호
- message(jsobject msg)
방법
- void sendMessage(jsobject message)
상세 설명
WorkerScript를 사용하여 새 스레드에서 작업을 실행할 수 있습니다. 이는 메인 GUI 스레드가 차단되지 않도록 백그라운드에서 작업을 실행하는 데 유용합니다.
sendMessage() 및 onMessage() 핸들러를 사용하여 새 스레드와 부모 스레드 간에 메시지를 주고받을 수 있습니다.
예시:
import QtQuick
Rectangle {
width: 300; height: 300
Text {
id: myText
text: 'Click anywhere'
}
WorkerScript {
id: myWorker
source: "script.mjs"
onMessage: (messageObject)=> myText.text = messageObject.reply
}
MouseArea {
anchors.fill: parent
onClicked: (mouse)=> myWorker.sendMessage({ 'x': mouse.x, 'y': mouse.y })
}
}위의 워커 스크립트는 새 스레드에서 수행될 작업을 처리하는 JavaScript 파일인 "script.mjs"를 지정합니다. 다음은 ` script.mjs`의 예시입니다:
WorkerScript.onMessage = function(message) {
// ... long-running operations and calculations are done here
WorkerScript.sendMessage({ 'reply': 'Mouse is at ' + message.x + ',' + message.y })
}사용자가 사각형 내 아무 곳이나 클릭하면 sendMessage() 가 호출되어 script.mjs 의 WorkerScript.onMessage() 핸들러가 트리거됩니다. 그러면 이 핸들러는 응답 메시지를 전송하고, 이 메시지는 myWorker 의 onMessage() 핸들러에서 수신됩니다.
이 예제에서는 확장자가 ".mjs"인 ECMAScript 모듈 스크립트를 사용합니다. 이 스크립트는 import 문을 사용하여 다른 모듈의 기능에 접근할 수 있으며, JavaScript 엄격 모드에서 실행됩니다.
반면, 워커 스크립트의 확장자가 ".js"인 경우, 일반 자바스크립트 문장을 포함하는 것으로 간주되어 비엄격 모드에서 실행됩니다.
참고: 각 WorkerScript 요소는 완벽한 격리 및 스레드 안전성을 보장하기 위해 별도의 JavaScript 엔진을 인스턴스화합니다. 이로 인해 환경에 비해 메모리 소비량이 너무 많아지는 경우, WorkerScript 요소를 공유하는 것을 고려해 보십시오.
제한 사항
WorkerScript.onMessage() 함수는 별도의 스레드에서 실행되므로, JavaScript 파일은 메인 QML 엔진과는 별개의 컨텍스트에서 평가됩니다. 즉, QML로 임포트되는 일반적인 JavaScript 파일과 달리, 위 예제의 ` script.mjs `는 QML 항목의 속성, 메서드 또는 기타 속성에 접근할 수 없으며, ` QQmlContext`를 통해 QML 객체에 설정된 컨텍스트 속성에도 접근할 수 없습니다.
또한, 워커 스크립트로 전달되거나 워커 스크립트에서 반환될 수 있는 값의 유형에 제한이 있습니다. 자세한 내용은 sendMessage() 문서를 참조하십시오.
일반 JavaScript 소스인 워커 스크립트는 .import 구문을 사용할 수 없습니다. ECMAScript 모듈인 스크립트는 import 및 export 문을 자유롭게 사용할 수 있습니다.
속성 문서
ready : bool [read-only]
이는 ` WorkerScript `가 초기화되었는지 여부와 관계없이, ` WorkerScript.sendMessage()`를 통해 메시지를 수신할 준비가 되어 있는 경우에도 마찬가지입니다.
source : url
여기에는 스레드 기반 작업을 위한 WorkerScript.onMessage() 핸들러를 구현하는 자바스크립트 파일의 URL이 저장됩니다.
URL의 파일 이름 부분이 ".mjs"로 끝나는 경우, 해당 스크립트는 ECMAScript 모듈로 파싱되어 엄격 모드에서 실행됩니다. 그렇지 않은 경우 일반 스크립트로 간주됩니다.
Signal 문서
message(jsobject msg)
이 신호는 sendMessage() 호출을 통해 다른 스레드의 워커 스크립트로부터 msg 메시지가 수신될 때 발생합니다.
참고: 해당 핸들러는 onMessage 입니다.
메서드 문서
void sendMessage(jsobject message)
지정된 ` message `를 다른 스레드의 워커 스크립트 핸들러로 전송합니다. 다른 워커 스크립트 핸들러는 `onMessage()` 핸들러를 통해 이 메시지를 수신할 수 있습니다.
message 객체에는 다음 유형의 값만 포함될 수 있습니다:
- boolean, number, string
- JavaScript 객체 및 배열
- ListModel 객체 ( QObject 에 다른 유형의 값을 포함하는 것은 허용되지 않습니다*)
모든 객체와 배열은 message 으로 복사됩니다. ListModel 객체를 제외하고, 다른 스레드에서 message 로 전달된 객체에 대한 모든 수정 사항은 원본 객체에 반영되지 않습니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.