<QApplicationStatic>

Header: #include <QApplicationStatic>

매크로

(since 6.3) Q_APPLICATION_STATIC(Type, VariableName, ...)

자세한 설명

매크로 문서

[since 6.3] Q_APPLICATION_STATIC(Type, VariableName, ...)

이 매크로는 Q_GLOBAL_STATIC 을 확장하고 가변 인자로 초기화된 VariableName 이라는 이름의 QGlobalStatic 유형의 전역 및 정적 객체를 생성하며, 이 객체는 Type 에 대한 포인터로 작동하며, 이 유형의 실제 수명은 QCoreApplication 에 바인딩됩니다. Q_APPLICATION_STATIC에 의해 생성된 객체는 처음 사용할 때 자체 초기화되므로 애플리케이션이나 라이브러리의 로드 시간이 늘어나지 않습니다. 또한 이 객체는 모든 플랫폼에서 스레드 안전 방식으로 초기화됩니다.

유형이 프로그램 종료 시에만 소멸되는 Q_GLOBAL_STATIC 과 달리, 여기서 유형의 실제 수명은 QCoreApplication 의 수명에 묶여 있습니다. 따라서 QCoreApplication 가 소멸되면 함께 소멸되는 반정적 QObject를 저장하는 데 이상적입니다. 즉, QCoreApplication 가 소멸 신호를 보내면 유형이 삭제됩니다. 새 QCoreApplication 도 생성된 경우 다시 액세스할 때 개체가 다시 생성될 수 있습니다.

이 값은 QCoreApplication 에 바인딩되어 있으므로 유효한 QCoreApplication::instance()이 있는 경우에만 액세스해야 합니다. QCoreApplication 이 생성되기 전이나 소멸된 후에 이 개체에 액세스하면 경고가 표시되며 예측할 수 없는 동작이 발생할 수 있습니다.

이 매크로의 일반적인 사용법은 다음과 같으며, 글로벌 컨텍스트(즉, 함수 본문 외부)에서 사용됩니다:

Q_APPLICATION_STATIC(MyQObjectType, staticType, "some string", function())

이 매크로에 가변적으로 전달되는 인수는 객체가 생성될 때마다 평가되므로 위의 예에서 객체가 다시 생성되면 function 함수가 두 번 이상 호출된다는 점에 유의하세요.

값이 QCoreApplication 의 수명에 바인딩되는 것 외에도 이 매크로는 Q_GLOBAL_STATIC()와 동일하게 작동합니다. 자세한 내용은 해당 매크로의 문서를 참조하세요.

스레딩 보장

Q_APPLICATION_STATIC 매크로는 여러 스레드가 동시에 개체에 액세스하려고 시도하더라도 개체가 한 번만( QCoreApplication)의 수명 동안 초기화되도록 보장합니다. 이는 객체별 뮤텍스를 제공함으로써 이루어지며, 애플리케이션 및 라이브러리 개발자는 이 뮤텍스가 잠긴 상태에서 객체가 구성되므로 동일한 객체의 초기화에 다시 진입해서는 안 되며 그렇지 않으면 교착 상태가 발생한다는 점을 인지하고 있어야 합니다.

객체 소멸에는 스레드 안전성이 없으므로 QCoreApplication 소멸자가 실행되기 시작하면 사용자 코드가 이 객체에 액세스해서는 안 됩니다. 사용자 코드는 메인 스레드의 이벤트 루프가 종료된 후에는 액세스하지 않는 등 이런 일이 발생하지 않도록 준비해야 합니다.

Q_GLOBAL_STATIC 와 마찬가지로 Q_APPLICATION_STATIC은 객체 생성이 완료된 후에는 객체에 대한 액세스에 대해 스레드 안전 보장을 제공하지 않습니다. 레이시 데이터 액세스가 발생하지 않도록 하는 것은 사용자 코드에 달려 있습니다.

이 작업으로 생성된 객체가 QObject 인 경우 관련 스레드가 객체 생성에 성공한 스레드가 됩니다. 메인 스레드에 의해 소멸되므로 소멸 전에 메인 스레드에 moveToThread()를 전달하거나 스레드에 전달하지 않는 것이 좋습니다. 메인 스레드가 객체를 초기화할 스레드라는 것을 보장할 수 없는 경우 해당 클래스의 생성자에서 이를 수행하는 것이 현명한 해결책입니다.

이 매크로는 Qt 6.3에 도입되었습니다.

Q_GLOBAL_STATICQGlobalStatic참조하십시오 .

© 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.