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);
}