Qt 스레드 신호 및 슬롯 간 연결

2856 단어 threadqtsignal
Qt는 세 가지 종류의 신호 - 슬롯 연결을 지원합니다: 1, 직접 연결, signal이 발사될 때 slot가 즉시 호출됩니다.이 슬로트는 시그널을 발사하는 그 라인에서 실행됩니다. (수신 대상이 생존하는 그 라인이 아닐 수도 있습니다.) 2, 대기열 연결입니다. 제어권이 대상이 속하는 그 라인의 이벤트 순환으로 돌아갈 때, 슬로트는 호출됩니다.이 slot은 수신 대상이 생존하는 그 라인에서 3, 자동 연결 (절약) 을 실행합니다. 만약 신호 발사와 수신자가 같은 라인에 있다면, 그 행위는 직접 연결과 같고, 그렇지 않으면, 그 행위는 대기열 연결과 같습니다.
연결 형식은 연결 ()에 매개 변수를 전달해서 지정할 수 있습니다.주의해야 할 것은 발송자와 수신자가 서로 다른 라인에서 생존하고 이벤트 순환이 수신자의 라인에서 실행되고 있을 때 직접 연결을 사용하는 것은 안전하지 않다는 것이다.같은 이치로 서로 다른 라인에 생존하는 대상을 호출하는 함수도 안전하지 않다.QObject::connect () 자체는 안전한 스레드입니다.
This enum describes the types of connection that can be used between signals and slots. In particular, it determines whether a particular signal is delivered to a slot immediately or queued for delivery at a later time.
Constant
Value
Description
Qt::AutoConnection
0
(default) If the signal is emitted from a different thread than the receiving object, the signal is queued, behaving as Qt::QueuedConnection. Otherwise, the slot is invoked directly, behaving as Qt::DirectConnection. The type of connection is determined when the signal is emitted.
Qt::DirectConnection
1
The slot is invoked immediately, when the signal is emitted.
Qt::QueuedConnection
2
The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread.
Qt::BlockingQueuedConnection
4
Same as QueuedConnection, except the current thread blocks until the slot returns. This connection type should only be used where the emitter and receiver are in different threads. Note: Violating this rule can cause your application to deadlock.
Qt::UniqueConnection
0x80
Same as AutoConnection, but the connection is made only if it does not duplicate an existing connection. i.e., if the same signal is already connected to the same slot for the same pair of objects, then the connection will fail. This connection type was introduced in Qt 4.6.
Qt::AutoCompatConnection
3
The default type when Qt 3 support is enabled. Same as AutoConnection but will also cause warnings to be output in certain situations. See Compatibility Signals and Slots for further information.
With queued connections, the parameters must be of types that are known to Qt's meta-object system, because Qt needs to copy the arguments to store them in an event behind the scenes. If you try to use a queued connection and get the error message:
 QObject::connect: Cannot queue arguments of type 'MyType'

Call qRegisterMetaType() to register the data type before you establish the connection.
When using signals and slots with multiple threads, see Signals and Slots Across Threads.
See also Thread Support in Qt, QObject::connect(), and qRegisterMetaType().

좋은 웹페이지 즐겨찾기