Mercurial > projects > hoofbaby
comparison deps/Platinum/ThirdParty/Neptune/Source/System/Posix/NptSelectableMessageQueue.cpp @ 0:3425707ddbf6
Initial import (hopefully this mercurial stuff works...)
author | fraserofthenight |
---|---|
date | Mon, 06 Jul 2009 08:06:28 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:3425707ddbf6 |
---|---|
1 /***************************************************************** | |
2 | | |
3 | Neptune - Selectable Message Queue | |
4 | | |
5 | (c) 2001-2003 Gilles Boccon-Gibod | |
6 | Author: Gilles Boccon-Gibod (bok@bok.net) | |
7 | | |
8 ****************************************************************/ | |
9 | |
10 /*---------------------------------------------------------------------- | |
11 | includes | |
12 +---------------------------------------------------------------------*/ | |
13 #include <unistd.h> | |
14 | |
15 #include "NptSelectableMessageQueue.h" | |
16 #include "NptDebug.h" | |
17 | |
18 /*---------------------------------------------------------------------- | |
19 | NPT_SelectableMessageQueue::NPT_SelectableMessageQueue | |
20 +---------------------------------------------------------------------*/ | |
21 NPT_SelectableMessageQueue::NPT_SelectableMessageQueue() | |
22 { | |
23 if (pipe(m_Pipe) != 0) { | |
24 m_Pipe[0] = -1; | |
25 m_Pipe[1] = -1; | |
26 } | |
27 } | |
28 | |
29 /*---------------------------------------------------------------------- | |
30 | NPT_SelectableMessageQueue::~NPT_SelectableMessageQueue | |
31 +---------------------------------------------------------------------*/ | |
32 NPT_SelectableMessageQueue::~NPT_SelectableMessageQueue() | |
33 { | |
34 close(m_Pipe[0]); | |
35 close(m_Pipe[1]); | |
36 } | |
37 | |
38 /*---------------------------------------------------------------------- | |
39 | NPT_SelectableMessageQueue::QueueMessage | |
40 +---------------------------------------------------------------------*/ | |
41 NPT_Result | |
42 NPT_SelectableMessageQueue::QueueMessage(NPT_Message* message, | |
43 NPT_MessageHandler* handler) | |
44 { | |
45 // first, queue the message | |
46 NPT_Result result = NPT_SimpleMessageQueue::QueueMessage(message, handler); | |
47 | |
48 // then write a byte on the pipe to signal that there is a message | |
49 if (write(m_Pipe[1], "\0", 1) != 1) { | |
50 result = NPT_FAILURE; | |
51 } | |
52 | |
53 return result; | |
54 } | |
55 | |
56 /*---------------------------------------------------------------------- | |
57 | NPT_SelectableMessageQueue::PumpMessage | |
58 +---------------------------------------------------------------------*/ | |
59 NPT_Result | |
60 NPT_SelectableMessageQueue::PumpMessage(NPT_Timeout timeout /* = NPT_TIMEOUT_INFINITE */) | |
61 { | |
62 NPT_Result result = NPT_SimpleMessageQueue::PumpMessage(timeout); | |
63 if (NPT_SUCCEEDED(result)) { | |
64 // flush the event | |
65 FlushEvent(); | |
66 } | |
67 return result; | |
68 } | |
69 | |
70 /*---------------------------------------------------------------------- | |
71 | NPT_SelectableMessageQueue::FlushEvent | |
72 +---------------------------------------------------------------------*/ | |
73 NPT_Result | |
74 NPT_SelectableMessageQueue::FlushEvent() | |
75 { | |
76 char buffer[1]; | |
77 if (read(m_Pipe[0], buffer, 1) != 1) { | |
78 return NPT_FAILURE; | |
79 } | |
80 | |
81 return NPT_SUCCESS; | |
82 } | |
83 | |
84 |