Browse Source

now its done :)

dmuratshin 9 years ago
parent
commit
7ad264a57d
2 changed files with 42 additions and 45 deletions
  1. 41 44
      oxygine/src/core/ThreadMessages.cpp
  2. 1 1
      oxygine/src/core/ThreadMessages.h

+ 41 - 44
oxygine/src/core/ThreadMessages.cpp

@@ -11,7 +11,7 @@ namespace oxygine
         return ((size_t*)(&pt))[0];
     }
 
-#if 1
+#if 0
 #define  LOGDN(format, ...)  log::messageln("ThreadMessages(%lu)::" format, threadID(), __VA_ARGS__)
 #else
 #define  LOGDN(...)  ((void)0)
@@ -91,45 +91,13 @@ namespace oxygine
         _waitMessage();
     }
 
-
-    void ThreadMessages::_gotMessage()
-    {
-        if (_last.cb)
-        {
-            LOGDN("running callback for %d", _last._id);
-            _last.cb(_last);
-            _last.cb = 0;
-        }
-
-#ifndef __S3E__
-        if (_last.cbFunction)
-        {
-            LOGDN("running callback function for %d", _last._id);
-            _last.cbFunction();
-            _last.cbFunction = std::function< void() >();
-        }
-#endif
-
-        LOGDN("_gotMessage id=%d", _last._id);
-
-        if (!_last.msgid)
-        {
-            _replyLast(0);
-        }
-    }
-
     void ThreadMessages::get(message& ev)
     {
         MutexPthreadLock lock(_mutex);
         LOGDN("get");
 
         _waitMessage();
-
-        ev = _events.front();
-        _events.erase(_events.begin());
-        _last = ev;
-
-        _gotMessage();
+        _popMessage(ev);
     }
 
     bool ThreadMessages::empty()
@@ -152,12 +120,42 @@ namespace oxygine
         _events.clear();
     }
 
+    void ThreadMessages::_popMessage(message& res)
+    {
+        _last = _events.front();
+        _events.erase(_events.begin());
+
+        if (_last.cb)
+        {
+            LOGDN("running callback for %d", _last._id);
+            _last.cb(_last);
+            _last.cb = 0;
+        }
+
+#ifndef __S3E__
+        if (_last.cbFunction)
+        {
+            LOGDN("running callback function for %d", _last._id);
+            _last.cbFunction();
+            _last.cbFunction = std::function< void() >();
+        }
+#endif
+
+        LOGDN("_gotMessage id=%d, msgid=%d", _last._id, _last.msgid);
+
+        if (!_last.msgid)
+        {
+            _replyLast(0);
+        }
+
+        res = _last;
+    }
+
     bool ThreadMessages::peek(peekMessage& ev, bool del)
     {
         if (!ev.num)
             return false;
 
-        bool has = false;
 
         MutexPthreadLock lock(_mutex);
         if (ev.num == -1)
@@ -169,19 +167,14 @@ namespace oxygine
 
         if (!_events.empty() && ev.num > 0)
         {
-            has = true;
-
-            static_cast<message&>(ev) = _events.front();
             if (del)
-            {
-                _events.erase(_events.begin());
-                _last = ev;
-                _gotMessage();
-            }
+                _popMessage(ev);
             ev.num--;
+
+            return true;
         }
 
-        return has;
+        return false;
     }
 
     void ThreadMessages::_replyLast(void* val)
@@ -214,6 +207,8 @@ namespace oxygine
 
     void* ThreadMessages::send(int msgid, void* arg1, void* arg2)
     {
+        OX_ASSERT(msgid);
+
         message ev;
         ev.msgid = msgid;
         ev.arg1 = arg1;
@@ -241,6 +236,8 @@ namespace oxygine
     void ThreadMessages::_pushMessageWaitReply(message& msg)
     {
         msg._id = ++_id;
+        LOGDN("_pushMessage id=%d msgid=%d", msg._id, msg.msgid);
+
         _waitReplyID = msg._id;
         _events.push_back(msg);
         pthread_cond_signal(&_cond);

+ 1 - 1
oxygine/src/core/ThreadMessages.h

@@ -92,7 +92,7 @@ namespace oxygine
 
         void _pushMessage(message&);
         void _pushMessageWaitReply(message&);
-        void _gotMessage();
+        void _popMessage(message&);
         void _replyLast(void* val);
         unsigned int _id;
         unsigned int _waitReplyID;