Added Bill Gray's improved message pump patch.

This commit is contained in:
casey langen 2017-03-27 12:04:24 -07:00
parent fb12405015
commit e49506fe3c

View File

@ -1,7 +1,6 @@
/* Public Domain Curses */
#include "pdcwin.h"
#include "curses.h"
void PDC_beep(void)
{
@ -11,29 +10,34 @@ void PDC_beep(void)
MessageBeep(0XFFFFFFFF);
}
void PDC_napms(int ms) /* 'ms' = milli, _not_ microseconds! */
{
/* RR: keep GUI window responsive while PDCurses sleeps */
MSG msg;
DWORD start, end, delta;
DWORD curr_ms = GetTickCount( );
const DWORD milliseconds_sleep_limit = ms + curr_ms;
const DWORD max_sleep_ms = 50; /* check messages 20 times a second */
extern bool PDC_bDone;
start = GetTickCount();
//PDC_LOG(("PDC_napms() - called: ms=%d\n", ms));
PDC_LOG(("PDC_napms() - called: ms=%d\n", ms));
/* Pump all pending messages from WIN32 to the window handler */
while( !PDC_bDone && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
while( !PDC_bDone && curr_ms < milliseconds_sleep_limit )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
DWORD sleep_millisecs;
end = GetTickCount();
delta = end - start;
delta = ms > delta ? ms - delta : 0;
Sleep(delta);
while( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
curr_ms = GetTickCount( );
sleep_millisecs = milliseconds_sleep_limit - curr_ms;
if( sleep_millisecs > max_sleep_ms)
sleep_millisecs = max_sleep_ms;
Sleep( sleep_millisecs);
curr_ms += sleep_millisecs;
}
}
const char *PDC_sysname(void)
@ -54,4 +58,4 @@ const PDC_version_info PDC_version = { PDC_PORT_WIN32A,
#else
FALSE,
#endif
};
};