diff --git a/src/ginput/mouse.c b/src/ginput/mouse.c index 35a55bc5..94734888 100644 --- a/src/ginput/mouse.c +++ b/src/ginput/mouse.c @@ -378,6 +378,10 @@ GSourceHandle ginputGetMouse(uint16_t instance) { } bool_t ginputGetMouseStatus(uint16_t instance, GEventMouse *pe) { + // Win32 threads don't seem to recognise priority and/or pre-emption + // so we add a sleep here to prevent 100% polled applications from locking up. + chThdSleepMilliseconds(1); + if (instance || (MouseConfig.flags & (FLG_INIT_DONE|FLG_IN_CAL)) != FLG_INIT_DONE) return FALSE; diff --git a/src/ginput/toggle.c b/src/ginput/toggle.c index 66021cd0..4401e295 100644 --- a/src/ginput/toggle.c +++ b/src/ginput/toggle.c @@ -145,6 +145,10 @@ void ginputInvertToggle(uint16_t instance, bool_t invert) { * Returns FALSE on error (eg invalid instance) */ bool_t ginputGetToggleStatus(uint16_t instance, GEventToggle *ptoggle) { + // Win32 threads don't seem to recognise priority and/or pre-emption + // so we add a sleep here to prevent 100% polled applications from locking up. + chThdSleepMilliseconds(1); + if (instance >= GINPUT_TOGGLE_NUM_PORTS) return FALSE; ptoggle->type = GEVENT_TOGGLE;