]> git.saurik.com Git - wxWidgets.git/blob - interface/wx/msgqueue.h
general docview.cpp code cleanup; use wxVector<> instead of manually-allocated arrays...
[wxWidgets.git] / interface / wx / msgqueue.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: msgqueue.h
3 // Purpose: interface of wxMessageQueue<T>
4 // Author: wxWidgets team
5 // RCS-ID: $Id$
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
8
9 /**
10
11 wxMessageQueue allows passing messages between threads.
12
13 This class should be typically used to communicate between the main and worker
14 threads. The main thread calls wxMessageQueue::Post and
15 the worker thread calls wxMessageQueue::Receive.
16
17 For this class a message is an object of arbitrary type T. Notice that
18 often there is a some special message indicating that the thread
19 should terminate as there is no other way to gracefully shutdown a thread
20 waiting on the message queue.
21
22 @nolibrary
23 @category{FIXME}
24
25 @see wxThread
26 */
27 class wxMessageQueue<T>
28 {
29 public:
30 /**
31 Returns @true if the object had been initialized successfully, @false
32 if an error occurred.
33 */
34 bool IsOk() const;
35
36 /**
37 Add a message to this queue and signal the threads waiting for messages
38 (i.e. the threads which called wxMessageQueue::Receive or
39 wxMessageQueue::ReceiveTimeout).
40 This method is safe to call from multiple threads in parallel.
41 */
42 wxMessageQueueError Post(T const& msg);
43
44 /**
45 Block until a message becomes available in the queue. Waits indefinitely long
46 or until an error occurs.
47 The message is returned in @e msg.
48 */
49 wxMessageQueueError Receive(T& msg);
50
51 /**
52 Block until a message becomes available in the queue, but no more than
53 @a timeout milliseconds has elapsed.
54 If no message is available after @a timeout milliseconds then returns
55 @b wxMSGQUEUE_TIMEOUT.
56 If @a timeout is 0 then checks for any messages present in the queue
57 and returns immediately without waiting.
58 The message is returned in @e msg.
59 */
60 wxMessageQueueError ReceiveTimeout(long timeout, T& msg);
61
62 /**
63 Default and only constructor. Use wxMessageQueue::IsOk to check
64 if the object was successfully initialized.
65 */
66 wxMessageQueue();
67 };
68