diff --git a/changes.txt b/changes.txt index 7d29ef38..42e9e444 100644 --- a/changes.txt +++ b/changes.txt @@ -1,6 +1,9 @@ -------------------------- Changes in 1.9 (not yet released) +- CIrrDeviceWin32::yield() now uses Sleep(0) instead of Sleep(1). + We had Sleep(1) to allow yielding to all processes back in Windows XP time. + But a) This caused Windows apps to sleep for 15ms usually and b) behavior for Sleep(0) was changed after Window XP to do what we want it to do. - Add ICursorControl::getReferenceRect - Fix: Listbox no longer sending EGET_LISTBOX_SELECTED_AGAIN instead of EGET_LISTBOX_CHANGED when pressed mouse was moved over item before releasing the mouse button - Listbox items can now change individual background colors diff --git a/examples/02.Quake3Map/main.cpp b/examples/02.Quake3Map/main.cpp index 042b70fe..6ada5b4d 100644 --- a/examples/02.Quake3Map/main.cpp +++ b/examples/02.Quake3Map/main.cpp @@ -168,6 +168,7 @@ int main() device->setWindowCaption(str.c_str()); lastFPS = fps; } + device->yield(); } else device->yield(); diff --git a/examples/22.MaterialViewer/main.cpp b/examples/22.MaterialViewer/main.cpp index 37490b9a..bce285d7 100755 --- a/examples/22.MaterialViewer/main.cpp +++ b/examples/22.MaterialViewer/main.cpp @@ -884,7 +884,7 @@ bool CApp::update() } // be nice - Device->sleep( 5 ); + Device->yield(); return true; } diff --git a/examples/24.CursorControl/main.cpp b/examples/24.CursorControl/main.cpp index d3138663..6f504dd3 100644 --- a/examples/24.CursorControl/main.cpp +++ b/examples/24.CursorControl/main.cpp @@ -564,7 +564,7 @@ int main() } else { - device->sleep(10); + device->yield(); // be nice } } diff --git a/examples/25.XmlHandling/main.cpp b/examples/25.XmlHandling/main.cpp index b8f99d31..103ffe97 100644 --- a/examples/25.XmlHandling/main.cpp +++ b/examples/25.XmlHandling/main.cpp @@ -500,7 +500,7 @@ int main() app.Gui->drawAll(); app.Driver->endScene(); } - app.Device->sleep(10); + app.Device->yield(); // be nice } //app destroys device in destructor diff --git a/include/IrrlichtDevice.h b/include/IrrlichtDevice.h index 69038d1e..95a87c18 100644 --- a/include/IrrlichtDevice.h +++ b/include/IrrlichtDevice.h @@ -76,13 +76,17 @@ namespace irr virtual bool run() = 0; //! Cause the device to temporarily pause execution and let other processes run. - /** This should bring down processor usage without major - performance loss for Irrlicht */ + /** This should bring down processor usage without major performance loss for Irrlicht. + But this is system dependent, so there's a chance your thread won't get control back quickly. + */ virtual void yield() = 0; //! Pause execution and let other processes to run for a specified amount of time. - /** It may not wait the full given time, as sleep may be interrupted - \param timeMs: Time to sleep for in milliseconds. + /** It may not wait the full given time, as sleep may be interrupted and also may wait longer on some OS. + \param timeMs: Time to sleep for in milliseconds. Note that the OS can round up this number. + On Windows you usually get at least 15ms sleep time minium for any value > 0. + So if you call this in your main loop you can't get more than 65 FPS anymore in your game. + On most Linux systems it's relatively exact, but also no guarantee. \param pauseTimer: If true, pauses the device timer while sleeping */ virtual void sleep(u32 timeMs, bool pauseTimer=false) = 0; diff --git a/source/Irrlicht/CIrrDeviceWin32.cpp b/source/Irrlicht/CIrrDeviceWin32.cpp index c9ad4e40..88ecc26d 100644 --- a/source/Irrlicht/CIrrDeviceWin32.cpp +++ b/source/Irrlicht/CIrrDeviceWin32.cpp @@ -1231,7 +1231,7 @@ bool CIrrDeviceWin32::run() //! Pause the current process for the minimum time allowed only to allow other processes to execute void CIrrDeviceWin32::yield() { - Sleep(1); + Sleep(0); } //! Pause execution and let other processes to run for a specified amount of time. diff --git a/source/Irrlicht/Irrlicht17.0.vcxproj b/source/Irrlicht/Irrlicht17.0.vcxproj index e74f34ff..88c4ab76 100644 --- a/source/Irrlicht/Irrlicht17.0.vcxproj +++ b/source/Irrlicht/Irrlicht17.0.vcxproj @@ -168,7 +168,7 @@ AllRules.ruleset - AllRules.ruleset + Irrlicht.ruleset @@ -217,6 +217,9 @@ $(DXSDK_DIR)Lib\x64;$(LibraryPath);$(VSInstallDir);$(VSInstallDir)lib\amd64 + + false + _DEBUG;%(PreprocessorDefinitions) diff --git a/tools/GUIEditor/main.cpp b/tools/GUIEditor/main.cpp index d591c147..7e7b359a 100644 --- a/tools/GUIEditor/main.cpp +++ b/tools/GUIEditor/main.cpp @@ -72,7 +72,7 @@ int main() } // be nice to CPU - device->sleep(10); + device->yield(); if (!device->isWindowActive()) device->sleep(90); }