mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 22:41:43 +00:00
a5c8fedf47
The GLib main loop blocks on MsgWaitForMultipleObjectsEx to determine if there are any incoming messages while also allowing for background tasks to run. If all available messages are not processed after MsgWaitForMultipleObjectsEx has signaled that there are available, CPU usage will skyrocket. From my limited understanding (by inspection of profiling under Visual Studio): Key is pressed - MsgWaitForMultipleObjectsEx unblocks, and sends message to GDK's event handler. Some event is now queued. g_poll unblocks, calls the g_event_dispatch which finally resolves to gdk_event_dispatch. This then calls _gdk_win32_display_queue_events, but since a message is already queued, it fails to call PeekMessage and returns immediately. At the next iteration, g_poll again calls MsgWaitForMultipleObjectsEx which queues yet another event and returns almost immediately, since there are events available which haven't been processed by PeekMessage. The dispatch function is then called and the process repeats. https://bugzilla.gnome.org/show_bug.cgi?id=771568 |
||
---|---|---|
.. | ||
rc | ||
bdfcursor.c | ||
cursor.bdf | ||
gdkcursor-win32.c | ||
gdkdevice-virtual.c | ||
gdkdevice-virtual.h | ||
gdkdevice-win32.c | ||
gdkdevice-win32.h | ||
gdkdevice-wintab.c | ||
gdkdevice-wintab.h | ||
gdkdevicemanager-win32.c | ||
gdkdevicemanager-win32.h | ||
gdkdisplay-win32.c | ||
gdkdisplay-win32.h | ||
gdkdisplaymanager-win32.c | ||
gdkdnd-win32.c | ||
gdkevents-win32.c | ||
gdkgeometry-win32.c | ||
gdkglcontext-win32.c | ||
gdkglcontext-win32.h | ||
gdkglobals-win32.c | ||
gdkkeys-win32.c | ||
gdkmain-win32.c | ||
gdkmonitor-win32.c | ||
gdkmonitor-win32.h | ||
gdkprivate-win32.h | ||
gdkproperty-win32.c | ||
gdkscreen-win32.c | ||
gdkselection-win32.c | ||
gdktestutils-win32.c | ||
gdkwin32.h | ||
gdkwin32cursor.h | ||
gdkwin32display.h | ||
gdkwin32displaymanager.h | ||
gdkwin32dnd.h | ||
gdkwin32glcontext.h | ||
gdkwin32id.c | ||
gdkwin32keys.h | ||
gdkwin32misc.h | ||
gdkwin32monitor.h | ||
gdkwin32screen.h | ||
gdkwin32window.h | ||
gdkwindow-win32.c | ||
gdkwindow-win32.h | ||
libwntab32x.la | ||
Makefile.am | ||
makefile.msc | ||
pktdef.h | ||
wintab.h | ||
xcursors.h |