외에도 QMetaObject::invokeMethod
메서드/슬롯을 비동기 적으로 호출하는 유형 안전 방법 (GUI 스레드에서 실행을 대기열에 넣고 있습니까?)이 있습니까?QMetaObject :: invokeMethod 대안 (컴파일 타임 검사 포함)
QMetaObject::invokeMethod
에는 함수 이름에 대한 컴파일 타임 검사가 없습니다. 또한 모든 호출에 대해 조회 및 문자열 일치가 수행되므로 문자열을 기준으로 멤버 함수를 지정하는 데 오버 헤드가 있습니다.
컴파일 시간 검사를 제공하는 메서드를 호출하기위한 새로운 QObject::connect
구문과 비슷한 것이 있는지 궁금합니다.
하나의 솔루션은 신호 슬롯 아키텍처를 사용하지만이 방법은 QObject 클래스의 각 호출자 코드를 해당 신호를 내보낼 수 있도록 배치합니다. QEventLoop
이 있어야합니다 QTimer::singleShot
가 호출되는 스레드 :
기본적으로 https://bugreports.qt.io/browse/QTBUG-36861입니다. – peppe
@peppe : 대안이없는 것 같습니다. https://bugreports.qt.io/browse/QTBUG-55304 – Isaac
[this] (https://stackoverflow.com/a/21653558/2666212)를보십시오. 따라서,'QMetaObject :: invokeMethod (object, "method")'대신에 다음과 같이 할 수 있습니다 :'{QObject src; QObject :: connect (& src, & QObject :: destroyed, object, & Object :: method);}'그런 식으로'QObject' 문맥을 가진 lamba 함수를 사용할 수도 있습니다. . . – Mike