diff options
author | elfmz <fenix1905@tut.by> | 2022-09-16 00:43:07 +0300 |
---|---|---|
committer | elfmz <fenix1905@tut.by> | 2022-09-16 00:43:07 +0300 |
commit | 247853b6748ff084fabb49c7501283305e0e10d5 (patch) | |
tree | d012e06b18f8043e0082cc0d0f55e3f7a1d5e4da /far2l/src/console | |
parent | 2a6a244412371cc154c90d1965115c7214a91582 (diff) |
optimize input wait loops, cosmetic
Diffstat (limited to 'far2l/src/console')
-rw-r--r-- | far2l/src/console/console.cpp | 4 | ||||
-rw-r--r-- | far2l/src/console/keyboard.cpp | 123 |
2 files changed, 68 insertions, 59 deletions
diff --git a/far2l/src/console/console.cpp b/far2l/src/console/console.cpp index 73567c5a..07c018b2 100644 --- a/far2l/src/console/console.cpp +++ b/far2l/src/console/console.cpp @@ -253,8 +253,10 @@ bool console::PeekInput(INPUT_RECORD& Buffer) if (!InspectStickyKeyEvent(Buffer)) break; - if (!WINPORT(ReadConsoleInput)(GetInputHandle(), &Buffer, 1, &NumberOfEventsRead) || !NumberOfEventsRead) + if (!WINPORT(ReadConsoleInput)(GetInputHandle(), &Buffer, 1, &NumberOfEventsRead) || !NumberOfEventsRead) { + fprintf(stderr, "console::PeekInput: failed to skip sticky input event\n"); WINPORT(Sleep)(100); + } } if(Opt.WindowMode && Buffer.EventType==MOUSE_EVENT) diff --git a/far2l/src/console/keyboard.cpp b/far2l/src/console/keyboard.cpp index 3f8a3014..9acb1109 100644 --- a/far2l/src/console/keyboard.cpp +++ b/far2l/src/console/keyboard.cpp @@ -60,6 +60,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "console.hpp" #include "palette.hpp" #include "xlat.hpp" +#include "InterThreadCall.hpp" /* start Глобальные переменные */ @@ -473,8 +474,7 @@ DWORD IsMouseButtonPressed() { GetInputRecord(&rec); } - - WINPORT(Sleep)(10); + WINPORT(WaitConsoleInput)(10); return MouseButtonState; } @@ -516,7 +516,7 @@ DWORD GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMouse,bool { _KEYMACRO(CleverSysLog Clev(L"GetInputRecord()")); static int LastEventIdle=FALSE; - DWORD LoopCount=0,CalcKey; + DWORD CalcKey; DWORD ReadKey=0; int NotMacros=FALSE; static int LastMsClickMacroKey=0; @@ -638,7 +638,7 @@ DWORD GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMouse,bool bool FullscreenState=IsFullscreen(); - for (;;) + for (DWORD LoopCount=0;;) { // "Реакция" на максимизацию/восстановление окна консоли if (ZoomedState!=Console.IsZoomed() && IconicState==Console.IsIconic()) @@ -718,7 +718,7 @@ DWORD GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMouse,bool } ScrBuf.Flush(); - WINPORT(Sleep)(10); + WINPORT(WaitConsoleInput)(160); // Позволяет избежать ситуации блокирования мыши if (Opt.Mouse) // А нужно ли это условие??? @@ -737,72 +737,72 @@ DWORD GetInputRecord(INPUT_RECORD *rec,bool ExcludeMacro,bool ProcessMouse,bool return KEY_NONE; } - if (!(LoopCount & 15)) - { - clock_t CurTime=GetProcessUptimeMSec(); + //if (!(LoopCount & 15)) + clock_t CurTime=GetProcessUptimeMSec(); - if (EnableShowTime) - ShowTime(0); + if (EnableShowTime) + ShowTime(0); - if (WaitInMainLoop) + if (WaitInMainLoop) + { + if (CheckForInactivityExit()) + return(KEY_NONE); + + if (!(LoopCount & 3)) { - if (CheckForInactivityExit()) - return(KEY_NONE); + static int Reenter=0; - if (!(LoopCount & 63)) + if (!Reenter) { - static int Reenter=0; + Reenter++; + SHORT X,Y; + GetRealCursorPos(X,Y); - if (!Reenter) + if (!X && Y==ScrY && CtrlObject->CmdLine->IsVisible()) { - Reenter++; - SHORT X,Y; - GetRealCursorPos(X,Y); - - if (!X && Y==ScrY && CtrlObject->CmdLine->IsVisible()) + for (;;) { - for (;;) - { - INPUT_RECORD tmprec; - int Key=GetInputRecord(&tmprec); - - if ((DWORD)Key==KEY_NONE || ((DWORD)Key!=KEY_SHIFT && tmprec.Event.KeyEvent.bKeyDown)) - break; - } + INPUT_RECORD tmprec; + int Key=GetInputRecord(&tmprec); - CtrlObject->Cp()->SetScreenPosition(); - ScrBuf.ResetShadow(); - ScrBuf.Flush(); + if ((DWORD)Key==KEY_NONE || ((DWORD)Key!=KEY_SHIFT && tmprec.Event.KeyEvent.bKeyDown)) + break; } - Reenter--; + CtrlObject->Cp()->SetScreenPosition(); + ScrBuf.ResetShadow(); + ScrBuf.Flush(); } - static int UpdateReenter=0; + Reenter--; + } - if (!UpdateReenter && CurTime-KeyPressedLastTime>700) - { - UpdateReenter=TRUE; - CtrlObject->Cp()->LeftPanel->UpdateIfChanged(UIC_UPDATE_NORMAL); - CtrlObject->Cp()->RightPanel->UpdateIfChanged(UIC_UPDATE_NORMAL); - UpdateReenter=FALSE; - } + static int UpdateReenter=0; + + if (!UpdateReenter && CurTime-KeyPressedLastTime>700) + { + UpdateReenter=TRUE; + CtrlObject->Cp()->LeftPanel->UpdateIfChanged(UIC_UPDATE_NORMAL); + CtrlObject->Cp()->RightPanel->UpdateIfChanged(UIC_UPDATE_NORMAL); + UpdateReenter=FALSE; } } + } - if (Opt.ScreenSaver && Opt.ScreenSaverTime>0 && - CurTime-StartIdleTime>Opt.ScreenSaverTime*60000) - if (!ScreenSaver(WaitInMainLoop)) - return(KEY_NONE); + if (Opt.ScreenSaver && Opt.ScreenSaverTime > 0 + && CurTime-StartIdleTime>Opt.ScreenSaverTime*60000) + { + if (!ScreenSaver(WaitInMainLoop)) + return(KEY_NONE); + } - if (!WaitInMainLoop && LoopCount==64) - { - LastEventIdle=TRUE; - memset(rec,0,sizeof(*rec)); - rec->EventType=KEY_EVENT; - sLastIdleDelivered=GetProcessUptimeMSec(); - return(KEY_IDLE); - } + if (!WaitInMainLoop && LoopCount == 4) + { + LastEventIdle = TRUE; + ZeroFill(*rec); + rec->EventType=KEY_EVENT; + sLastIdleDelivered=GetProcessUptimeMSec(); + return(KEY_IDLE); } if (PluginSynchroManager.Process()) @@ -1405,7 +1405,7 @@ DWORD WaitKey(DWORD KeyWait,DWORD delayMS,bool ExcludeMacro) SetCursorType(0,10); } - clock_t CheckTime=GetProcessUptimeMSec()+delayMS; + const clock_t CheckTime = GetProcessUptimeMSec() + delayMS; DWORD Key; for (;;) @@ -1431,13 +1431,20 @@ DWORD WaitKey(DWORD KeyWait,DWORD delayMS,bool ExcludeMacro) else if (Key == KeyWait) break; - if (delayMS && GetProcessUptimeMSec() >= CheckTime) + DWORD WaitExpiration = 1000; + if (delayMS) { - Key=KEY_NONE; - break; + const clock_t CurTime = GetProcessUptimeMSec(); + if (CurTime >= CheckTime) + { + Key = KEY_NONE; + break; + } + if (WaitExpiration > CheckTime - CurTime) + WaitExpiration = CheckTime - CurTime; } - WINPORT(Sleep)(10); + WINPORT(WaitConsoleInput)(WaitExpiration); } if (KeyWait == KEY_CTRLALTSHIFTRELEASE || KeyWait == KEY_RCTRLALTSHIFTRELEASE) |