OSDN Git Service

[fixed] busy wait in AndroidGraphics.pause()/destroy() magically transformed to somet...
authorbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Thu, 2 Dec 2010 02:06:29 +0000 (02:06 +0000)
committerbadlogicgames <badlogicgames@6c4fd544-2939-11df-bb46-9574ba5d0bfa>
Thu, 2 Dec 2010 02:06:29 +0000 (02:06 +0000)
backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidGraphics.java

index cf5b070..fea2023 100644 (file)
@@ -322,16 +322,27 @@ public final class AndroidGraphics implements Graphics, Renderer {
                synchronized (synch) {\r
                        running = false;\r
                        pause = true;\r
+                       while (pause) {\r
+                               try {\r
+                                       synch.wait();\r
+                               } catch (InterruptedException ignored) {\r
+                               }\r
+                       }\r
                }\r
-               while (pause); // busy wait. ya, nasty...               \r
        }\r
 \r
        void destroy() {\r
                synchronized (synch) {\r
                        running = false;\r
                        destroy = true;\r
+               \r
+                       while (destroy) {\r
+                               try {\r
+                                       synch.wait();\r
+                               } catch(InterruptedException ex) {                              \r
+                               }\r
+                       }\r
                }\r
-               while (destroy);\r
        }\r
 \r
        @Override\r
@@ -340,42 +351,44 @@ public final class AndroidGraphics implements Graphics, Renderer {
                deltaTime = (time - lastFrameTime) / 1000000000.0f;\r
                lastFrameTime = time;\r
                mean.addValue(deltaTime);\r
-       \r
+\r
                boolean lrunning = false;\r
                boolean lpause = false;\r
                boolean ldestroy = false;\r
                boolean lresume = false;\r
-               \r
-               synchronized(synch) {\r
+\r
+               synchronized (synch) {\r
                        lrunning = running;\r
                        lpause = pause;\r
                        ldestroy = destroy;\r
                        lresume = resume;\r
-                       \r
-                       if (resume) {                           \r
+\r
+                       if (resume) {\r
                                resume = false;\r
                        }\r
-                       \r
-                       if (pause) {                    \r
-                               pause = false;                  \r
+\r
+                       if (pause) {\r
+                               pause = false;\r
+                               synch.notifyAll();\r
                        }\r
-                       \r
-                       if (destroy) {                          \r
+\r
+                       if (destroy) {\r
                                destroy = false;\r
-                       }                       \r
+                               synch.notifyAll();\r
+                       }\r
                }\r
-               \r
+\r
                if (lresume) {\r
                        app.listener.resume();\r
                        Gdx.app.log("AndroidGraphics", "resumed");\r
                }\r
-               \r
+\r
                if (lrunning) {\r
-                       ((AndroidInput)Gdx.input).processEvents();\r
+                       app.input.processEvents();\r
                        app.listener.render();\r
                }\r
 \r
-               if (lpause) {                   \r
+               if (lpause) {\r
                        app.listener.pause();\r
                        Gdx.app.log("AndroidGraphics", "paused");\r
                }\r
@@ -383,8 +396,8 @@ public final class AndroidGraphics implements Graphics, Renderer {
                if (ldestroy) {\r
                        app.listener.dispose();\r
                        Gdx.app.log("AndroidGraphics", "destroyed");\r
-               }               \r
-               \r
+               }\r
+\r
                if (time - frameStart > 1000000000) {\r
                        fps = frames;\r
                        frames = 0;\r