* Don't sleep for negative amounts (overflows to very large sleep delays :-)
[matthijs/ABM2.git] / ABM2 / Engine / Kernel.cpp
index 12afa65230fd612f541dab224d80d41d0ce834bb..35d4afce603cc425a1fe83b2275477380459315b 100755 (executable)
@@ -27,19 +27,22 @@ int CKernel::Execute()
 {\r
 #ifdef WIN32\r
     MSG msg;\r
+#endif // WIN32\r
 \r
        while(taskList.size())\r
        {\r
                {\r
                        PROFILE("Kernel task loop");\r
 \r
-                       //DWORD starting_point = GetTickCount();\r
+                       DWORD starting_point = GetTickCount();\r
 \r
+#ifdef WIN32\r
         if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))\r
         {\r
             TranslateMessage(&msg);\r
             DispatchMessage(&msg);\r
         }\r
+#endif // WIN32\r
 \r
 \r
                        std::list< CMMPointer<ITask> >::iterator it, thisIt;\r
@@ -63,14 +66,15 @@ int CKernel::Execute()
                                }\r
                        }\r
                        IMMObject::CollectGarbage();\r
-                       //DWORD end_point = GetTickCount();\r
-//                     Sleep(50 - (end_point-starting_point));\r
+                       DWORD end_point = GetTickCount();\r
+                       /* Sleep if we didn't use up too much time already */\r
+                       if (starting_point + 50 > end_point)\r
+                               Sleep(50 - (end_point-starting_point));\r
                }\r
 #ifdef _DEBUG\r
                CProfileSample::Output();\r
 #endif\r
        }\r
-#endif // WIN32\r
 \r
        return 0;\r
 }\r