Browse Source

adding OX_NO_MT option to cmake

dmuratshin 9 years ago
parent
commit
0c5aa92bbd
3 changed files with 26 additions and 11 deletions
  1. 3 1
      CMakeLists.txt
  2. 20 10
      oxygine/src/ThreadLoader.cpp
  3. 3 0
      oxygine/src/ThreadLoader.h

+ 3 - 1
CMakeLists.txt

@@ -106,7 +106,9 @@ if (NOT OX_HAVE_HTTP)
 	set(OX_DEFINITIONS ${OX_DEFINITIONS} -DOX_NO_HTTP)
 endif(NOT OX_HAVE_HTTP)
 
-
+if (EMSCRIPTEN)
+	set(OX_DEFINITIONS ${OX_DEFINITIONS} -DOX_NO_MT)
+endif(EMSCRIPTEN)
 
 foreach(ITEM ${FOLDERS})
 	file(GLOB FLS

+ 20 - 10
oxygine/src/ThreadLoader.cpp

@@ -66,13 +66,11 @@ namespace oxygine
     }
 
 
-    void threadDone(const ThreadDispatcher::message& msg)
+    void ThreadLoader::threadDone(const ThreadDispatcher::message& msg)
     {
         ThreadLoader* tl = (ThreadLoader*)msg.cbData;
 
-        Event ev(ThreadLoader::COMPLETE, true);
-        tl->dispatchEvent(&ev);
-        tl->releaseRef();
+		tl->loaded(0);
     }
 
     void ThreadLoader::_threadFunc()
@@ -100,14 +98,26 @@ namespace oxygine
         core::getMainThreadDispatcher().postCallback(0, 0, 0, threadDone, this);
     }
 
+	void ThreadLoader::loaded(Event*)
+	{
+		Event ev(ThreadLoader::COMPLETE, true);
+		dispatchEvent(&ev);
+		releaseRef();
+	}
+
     void ThreadLoader::start()
     {
-        _threadDone = false;
-        addRef();
+		_threadDone = false;
+		addRef();
+
+#ifdef OX_NO_MT
+		getStage()->addTween(TweenDummy(), 100)->addDoneCallback(CLOSURE(this, &ThreadLoader::loaded));
+#else	
 
-        pthread_attr_t attr;
-        pthread_attr_init(&attr);
-        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
-        pthread_create(&_thread, &attr, _staticThreadFunc, this);
+		pthread_attr_t attr;
+		pthread_attr_init(&attr);
+		pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
+		pthread_create(&_thread, &attr, _staticThreadFunc, this);
+#endif
     }
 }

+ 3 - 0
oxygine/src/ThreadLoader.h

@@ -40,8 +40,11 @@ namespace oxygine
 
     private:
         static void* _staticThreadFunc(void* t);
+		static void threadDone(const ThreadDispatcher::message& msg);
         virtual void _threadFunc();
 
+		void loaded(Event*);
+
         pthread_t _thread;
         volatile bool _threadDone;