]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/msgqueue.h
Make storing non-trivial data in wxThreadSpecificInfo possible.
[wxWidgets.git] / interface / wx / msgqueue.h
index 35af235e019aa572cae16d7a64424b84dd1372bf..8caf29c7e8b6ecadc7501e69bb71509dd2ce728d 100644 (file)
@@ -1,32 +1,76 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        msgqueue.h
+// Name:        wx/msgqueue.h
 // Purpose:     interface of wxMessageQueue<T>
 // Author:      wxWidgets team
-// RCS-ID:      $Id$
-// Licence:     wxWindows license
+// Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 /**
+    Error codes for wxMessageQueue<> operations.
 
+    This enum contains the possible return value of wxMessageQueue<> methods.
+
+    @since 2.9.0
+    @category{threading}
+ */
+enum wxMessageQueueError
+{
+    /// Indicates that the operation completed successfully.
+    wxMSGQUEUE_NO_ERROR = 0,
+
+    /**
+        Indicates that no messages were received before timeout expired.
+
+        This return value is only used by wxMessageQueue<>::ReceiveTimeout().
+     */
+    wxMSGQUEUE_TIMEOUT,
+
+    /// Some unexpected (and fatal) error has occurred.
+    wxMSGQUEUE_MISC_ERROR
+};
+
+/**
     wxMessageQueue allows passing messages between threads.
 
     This class should be typically used to communicate between the main and worker
-    threads. The main thread calls wxMessageQueue::Post and
-    the worker thread calls wxMessageQueue::Receive.
+    threads. The main thread calls wxMessageQueue::Post and the worker thread
+    calls wxMessageQueue::Receive.
 
-    For this class a message is an object of arbitrary type T. Notice that
-    often there is a some special message indicating that the thread
+    @tparam T
+        For this class a message is an object of arbitrary type T.
+
+    Notice that often there is a some special message indicating that the thread
     should terminate as there is no other way to gracefully shutdown a thread
     waiting on the message queue.
 
+    @since 2.9.0
+
     @nolibrary
-    @category{FIXME}
+    @category{threading}
 
     @see wxThread
 */
+template <typename T>
 class wxMessageQueue<T>
 {
 public:
+    /**
+        Default and only constructor.
+        Use wxMessageQueue::IsOk to check if the object was successfully initialized.
+    */
+    wxMessageQueue();
+
+    /**
+        Remove all messages from the queue.
+
+        This method is meant to be called from the same thread(s) that call
+        Post() to discard any still pending requests if they became
+        unnecessary.
+
+        @since 2.9.1
+     */
+    wxMessageQueueError Clear();
+
     /**
         Returns @true if the object had been initialized successfully, @false
         if an error occurred.
@@ -37,32 +81,31 @@ public:
         Add a message to this queue and signal the threads waiting for messages
         (i.e. the threads which called wxMessageQueue::Receive or
         wxMessageQueue::ReceiveTimeout).
+
         This method is safe to call from multiple threads in parallel.
     */
     wxMessageQueueError Post(T const& msg);
 
     /**
-        Block until a message becomes available in the queue. Waits indefinitely long
-        or until an error occurs.
-        The message is returned in @e msg.
+        Block until a message becomes available in the queue.
+        Waits indefinitely long or until an error occurs.
+
+        The message is returned in @a msg.
     */
     wxMessageQueueError Receive(T& msg);
 
     /**
         Block until a message becomes available in the queue, but no more than
         @a timeout milliseconds has elapsed.
+
         If no message is available after @a timeout milliseconds then returns
         @b wxMSGQUEUE_TIMEOUT.
+
         If @a timeout is 0 then checks for any messages present in the queue
         and returns immediately without waiting.
-        The message is returned in @e msg.
-    */
-    wxMessageQueueError ReceiveTimeout(long timeout, T& msg);
 
-    /**
-        Default and only constructor. Use wxMessageQueue::IsOk to check
-        if the object was successfully initialized.
+        The message is returned in @a msg.
     */
-    wxMessageQueue();
+    wxMessageQueueError ReceiveTimeout(long timeout, T& msg);
 };