66 lines
1.3 KiB
C
66 lines
1.3 KiB
C
![]() |
// The base class of a cross flatform message pump implemention
|
|||
|
|
|||
|
#ifndef BASE_FRAMEWORK_WIN_MESSAGE_PUMP_H_
|
|||
|
#define BASE_FRAMEWORK_WIN_MESSAGE_PUMP_H_
|
|||
|
|
|||
|
#include "base/framework/message_pump.h"
|
|||
|
|
|||
|
#if defined(OS_WIN)
|
|||
|
#include <windows.h>
|
|||
|
#include "base/time/time.h"
|
|||
|
|
|||
|
namespace nbase
|
|||
|
{
|
|||
|
|
|||
|
class BASE_EXPORT WinMessagePump: public MessagePump
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
// UI<55><49>Ϣ<EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>
|
|||
|
// UI<55><49>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>Ϣ<EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>þ<EFBFBD><C3BE><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// TranslateMessage/DispatchMessageģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Dispatcher<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
class BASE_EXPORT Dispatcher
|
|||
|
{
|
|||
|
public:
|
|||
|
|
|||
|
virtual ~Dispatcher() {}
|
|||
|
virtual bool Dispatch(const MSG &message) = 0;
|
|||
|
};
|
|||
|
|
|||
|
WinMessagePump() : have_work_(0), state_(NULL) {}
|
|||
|
virtual ~WinMessagePump() {}
|
|||
|
|
|||
|
void RunWithDispatcher(Delegate* delegate, Dispatcher* dispatcher);
|
|||
|
|
|||
|
virtual void Run(Delegate* delegate) { return RunWithDispatcher(delegate, NULL); }
|
|||
|
virtual void Quit();
|
|||
|
|
|||
|
protected:
|
|||
|
struct RunState
|
|||
|
{
|
|||
|
int run_depth; // Ƕ<><EFBFBD><D7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
bool should_quit; // <20>Ƿ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>
|
|||
|
Delegate* delegate; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ί<EFBFBD><CEAF>
|
|||
|
Dispatcher* dispatcher; // <20><>Ϣ<EFBFBD>ɷ<EFBFBD><C9B7><EFBFBD>
|
|||
|
};
|
|||
|
|
|||
|
// ȡ<><C8A1>ǰ<EFBFBD><C7B0>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
int64_t GetCurrentDelay() const;
|
|||
|
virtual void DoRunLoop() = 0;
|
|||
|
|
|||
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD><C2B4><EFBFBD><EFBFBD>е<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
TimeTicks delayed_work_time_;
|
|||
|
|
|||
|
// ָʾ<D6B8><CABE>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>kMsgDoWork<72><6B>Ϣ
|
|||
|
long have_work_;
|
|||
|
|
|||
|
// ָʾ<D6B8><CABE>ǰMessagePump<6D><70>״̬
|
|||
|
RunState* state_;
|
|||
|
};
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
#endif // OS_WIN
|
|||
|
|
|||
|
#endif // BASE_FRAMEWORK_WIN_MESSAGE_PUMP_H_
|