This reverts 6c40531fb7
("Make main thread wake
up code more efficient and less error-prone in wxMSW") as, while being more
efficient, the new code doesn't work at all when we're not running the message
loop ourselves as it happens when the user opens a menu or starts resizing a
window because in both cases Windows runs a local message loop dispatching the
messages itself and this message loop doesn't react to our event object being
signalled.
So this approach can't work and needs to be reverted, even if it reintroduces
the danger of overflowing the message queue (see #9053).
Closes #17579.
54 lines
1.5 KiB
C++
54 lines
1.5 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/msw/evtloopconsole.h
|
|
// Purpose: wxConsoleEventLoop class for Windows
|
|
// Author: Vadim Zeitlin
|
|
// Modified by:
|
|
// Created: 2004-07-31
|
|
// Copyright: (c) 2003-2004 Vadim Zeitlin <vadim@wxwindows.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_MSW_EVTLOOPCONSOLE_H_
|
|
#define _WX_MSW_EVTLOOPCONSOLE_H_
|
|
|
|
class WXDLLIMPEXP_BASE wxMSWEventLoopBase : public wxEventLoopManual
|
|
{
|
|
public:
|
|
wxMSWEventLoopBase();
|
|
|
|
// implement base class pure virtuals
|
|
virtual bool Pending() const;
|
|
|
|
protected:
|
|
// get the next message from queue and return true or return false if we
|
|
// got WM_QUIT or an error occurred
|
|
bool GetNextMessage(WXMSG *msg);
|
|
|
|
// same as above but with a timeout and return value can be -1 meaning that
|
|
// time out expired in addition to
|
|
int GetNextMessageTimeout(WXMSG *msg, unsigned long timeout);
|
|
};
|
|
|
|
#if wxUSE_CONSOLE_EVENTLOOP
|
|
|
|
class WXDLLIMPEXP_BASE wxConsoleEventLoop : public wxMSWEventLoopBase
|
|
{
|
|
public:
|
|
wxConsoleEventLoop() { }
|
|
|
|
// override/implement base class virtuals
|
|
virtual bool Dispatch();
|
|
virtual int DispatchTimeout(unsigned long timeout);
|
|
virtual void WakeUp();
|
|
|
|
// Windows-specific function to process a single message
|
|
virtual void ProcessMessage(WXMSG *msg);
|
|
|
|
protected:
|
|
virtual void DoYieldFor(long eventsToProcess);
|
|
};
|
|
|
|
#endif // wxUSE_CONSOLE_EVENTLOOP
|
|
|
|
#endif // _WX_MSW_EVTLOOPCONSOLE_H_
|