summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Smith <msmith@trolltech.com>2010-01-12 12:09:31 (GMT)
committerJesper Thomschutz <jesper.thomschutz@nokia.com>2010-01-13 09:35:38 (GMT)
commit101619014a7ac9c989c57202c67b939d4d765093 (patch)
tree18ae40691cd9650fcb90d7a861d297c8e2e58b31
parent76d6c14a5c39b72cb4569bc71f4acb929a0eed79 (diff)
downloadQt-101619014a7ac9c989c57202c67b939d4d765093.zip
Qt-101619014a7ac9c989c57202c67b939d4d765093.tar.gz
Qt-101619014a7ac9c989c57202c67b939d4d765093.tar.bz2
doc: Updated the descriptions of the connection types.
Replaced the ambiguous "delivered" with the explanation that the blocking queued connection type blocks the emitter's thread until the slot finishes executing in the receiver's thread. Task-number: QTBUG-6392 (cherry picked from commit 4da15757269feb872432c43a3516a1349d6dcf39)
-rw-r--r--doc/src/frameworks-technologies/threads.qdoc45
-rw-r--r--src/corelib/global/qnamespace.qdoc73
-rw-r--r--src/corelib/kernel/qobject.cpp2
3 files changed, 73 insertions, 47 deletions
diff --git a/doc/src/frameworks-technologies/threads.qdoc b/doc/src/frameworks-technologies/threads.qdoc
index fa173c5..fbfe94b 100644
--- a/doc/src/frameworks-technologies/threads.qdoc
+++ b/doc/src/frameworks-technologies/threads.qdoc
@@ -472,24 +472,37 @@
\section1 Signals and Slots Across Threads
- Qt supports three types of signal-slot connections:
+ Qt supports these signal-slot connection types:
\list
- \o With \l{Qt::DirectConnection}{direct connections}, the
- slot gets called immediately when the signal is emitted. The
- slot is executed in the thread that emitted the signal (which
- is not necessarily the thread where the receiver object
- lives).
-
- \o With \l{Qt::QueuedConnection}{queued connections}, the
- slot is invoked when control returns to the event loop of the
- thread to which the object belongs. The slot is executed in
- the thread where the receiver object lives.
-
- \o With \l{Qt::AutoConnection}{auto connections} (the default),
- the behavior is the same as with direct connections if
- the signal is emitted in the thread where the receiver lives;
- otherwise, the behavior is that of a queued connection.
+
+ \o \l{Qt::AutoConnection}{Auto Connection} (default) The behavior
+ is the same as the Direct Connection, if the emitter and
+ receiver are in the same thread. The behavior is the same as
+ the Queued Connection, if the emitter and receiver are in
+ different threads.
+
+ \o \l{Qt::DirectConnection}{Direct Connection} The slot is invoked
+ immediately, when the signal is emitted. The slot is executed
+ in the emitter's thread, which is not necessarily the
+ receiver's thread.
+
+ \o \l{Qt::QueuedConnection}{Queued Connection} 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.
+
+ \o \l{Qt::BlockingQueuedConnection}{Blocking Queued Connection}
+ The slot is invoked as for the Queued Connection, except the
+ current thread blocks until the slot returns. \note Using this
+ type to connect objects in the same thread will cause deadlock.
+
+ \o \l{Qt::UniqueConnection}{Unique Connection} The behavior is the
+ same as the Auto Connection, 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 is not made and connect()
+ returns false.
+
\endlist
The connection type can be specified by passing an additional
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index e40e51b..e663268 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -515,45 +515,58 @@
/*!
\enum Qt::ConnectionType
- 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.
+ 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.
+
+ \value AutoConnection
+ (default) Same as DirectConnection, if the emitter and
+ receiver are in the same thread. Same as QueuedConnection,
+ if the emitter and receiver are in different threads.
+
+ \value DirectConnection
+ The slot is invoked immediately, when the signal is
+ emitted.
+
+ \value QueuedConnection
+ 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.
- \value DirectConnection When emitted, the signal is immediately delivered to the slot.
- \value QueuedConnection When emitted, the signal is queued until the event loop is
- able to deliver it to the slot.
\value BlockingQueuedConnection
- Same as QueuedConnection, except that the current thread blocks
- until the slot has been delivered. This connection type should
- only be used for receivers in a different thread. Note that misuse
- of this type can lead to deadlocks in your application.
- \value AutoConnection If the signal is emitted from the thread
- in which the receiving object lives, the
- slot is invoked directly, as with
- Qt::DirectConnection; otherwise the
- signal is queued, as with
- Qt::QueuedConnection.
- \value UniqueConnection Same as AutoConnection, but there will be a check that the signal is
- not already connected to the same slot before connecting, otherwise,
- the connection will fail.
- This value was introduced in Qt 4.6.
+ 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.
+
+ \value UniqueConnection
+ 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.
+
\value AutoCompatConnection
- The default connection type for signals and slots when Qt 3 support
- is enabled. Equivalent to AutoConnection for connections but will cause warnings
- to be output under certain circumstances. See
- \l{Porting to Qt 4#Compatibility Signals and Slots}{Compatibility Signals and Slots}
- for further information.
+ The default type when Qt 3 support is enabled. Same as
+ AutoConnection but will also cause warnings to be output in
+ certain situations. See \l{Porting to Qt 4#Compatibility
+ Signals and Slots}{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
+ 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:
\snippet doc/src/snippets/code/doc_src_qnamespace.qdoc 0
- call qRegisterMetaType() to register the data type before you
+ Call qRegisterMetaType() to register the data type before you
establish the connection.
+ When using signals and slots with multiple threads, see \l{Signals and Slots Across Threads}.
+
\sa {Thread Support in Qt}, QObject::connect(), qRegisterMetaType()
*/
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 2a71e88..fc6ac33 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -2456,7 +2456,7 @@ int QObject::receivers(const char *signal) const
If you pass the Qt::UniqueConnection \a type, the connection will only
be made if it is not a duplicate. If there is already a duplicate
(exact same signal to the exact same slot on the same objects),
- the connection will fail and connect will return false
+ the connection will fail and connect will return false.
The optional \a type parameter describes the type of connection
to establish. In particular, it determines whether a particular