WorkerScript QML Type
Qt Quick 애플리케이션에서 스레드 사용을 활성화합니다. 더 보기...
Import Statement: | import QtQml.WorkerScript |
속성
신호
- message(jsobject msg)
방법
- sendMessage(jsobject message)
자세한 설명
작업자 스크립트를 사용하여 새 스레드에서 작업을 실행합니다. 이는 메인 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 모듈인 스크립트를 사용합니다. 이 스크립트는 가져오기 문을 사용하여 다른 모듈의 기능에 액세스할 수 있으며 JavaScript 엄격 모드에서 실행됩니다.
작업자 스크립트의 확장자가 ".js"인 경우 일반 JavaScript 문이 포함된 것으로 간주되며 비강제 모드에서 실행됩니다.
참고: 각 작업자 스크립트 요소는 완벽한 격리 및 스레드 안전을 보장하기 위해 별도의 JavaScript 엔진을 인스턴스화합니다. 이로 인해 사용 중인 환경에 비해 메모리 사용량이 너무 많다면 WorkerScript 요소를 공유하는 것이 좋습니다.
제한 사항
WorkerScript.onMessage()
함수는 별도의 스레드에서 실행되므로 JavaScript 파일은 기본 QML 엔진과는 별도의 컨텍스트에서 평가됩니다. 즉, QML로 가져오는 일반 JavaScript 파일과 달리 위 예제의 script.mjs
은 QML 항목의 속성, 메서드 또는 기타 속성에 액세스할 수 없으며 QQmlContext 을 통해 QML 객체에 설정된 컨텍스트 속성에도 액세스할 수 없습니다.
또한 워커 스크립트와 주고받을 수 있는 값의 유형에도 제한이 있습니다. 자세한 내용은 sendMessage() 문서를 참조하세요.
일반 JavaScript 소스인 워커 스크립트는 .import 구문을 사용할 수 없습니다. ECMAScript 모듈인 스크립트는 가져오기 및 내보내기 문을 자유롭게 사용할 수 있습니다.
속성 문서
ready : bool |
WorkerScript 이 초기화되었는지 여부와 WorkerScript.sendMessage()
을 통해 메시지를 수신할 준비가 되었는지 여부를 보유합니다.
source : url |
여기에는 스레드 작업용 WorkerScript.onMessage()
핸들러를 구현하는 JavaScript 파일의 URL이 저장됩니다.
URL의 파일 이름 구성 요소가 ".mjs"로 끝나면 스크립트가 ECMAScript 모듈로 구문 분석되고 엄격한 모드로 실행됩니다. 그렇지 않으면 일반 스크립트로 간주됩니다.
신호 문서
message(jsobject msg) |
이 신호는 sendMessage() 호출을 통해 다른 스레드의 작업자 스크립트에서 msg 메시지를 수신할 때 발생합니다.
참고: 해당 핸들러는 onMessage
입니다.
메서드 문서
sendMessage(jsobject message) |
주어진 message 을 다른 스레드의 워커 스크립트 핸들러로 보냅니다. 다른 워커 스크립트 핸들러는 onMessage() 핸들러를 통해 이 메시지를 받을 수 있습니다.
message
객체는 다음 유형의 값만 포함할 수 있습니다:
- 부울, 숫자, 문자열
- JavaScript 객체 및 배열
- ListModel 객체(다른 유형의 QObject*는 허용되지 않음)
모든 객체와 배열은 message
에 복사됩니다. ListModel 객체를 제외하고 message
에서 전달된 객체에 대한 다른 스레드의 수정 사항은 원본 객체에 반영되지 않습니다.
© 2025 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.