62 lines
1.1 KiB
C++
62 lines
1.1 KiB
C++
// Copyright (c) 2011, NetEase Inc. All rights reserved.
|
||
//
|
||
// Author: wrt(guangguang)
|
||
// Date: 2011/6/8
|
||
//
|
||
// The base class of a cross flatform message pump implemention
|
||
|
||
#include "base/framework/win_message_pump.h"
|
||
|
||
#if defined(OS_WIN)
|
||
#include <assert.h>
|
||
#include <math.h>
|
||
|
||
namespace nbase
|
||
{
|
||
|
||
void WinMessagePump::RunWithDispatcher(Delegate* delegate, Dispatcher* dispatcher)
|
||
{
|
||
assert(delegate);
|
||
|
||
RunState rs;
|
||
rs.delegate = delegate;
|
||
rs.dispatcher = dispatcher;
|
||
rs.should_quit = false;
|
||
rs.run_depth = state_ ? state_->run_depth + 1 : 1;
|
||
|
||
RunState* previous_state = state_;
|
||
state_ = &rs;
|
||
|
||
DoRunLoop();
|
||
|
||
state_ = previous_state;
|
||
}
|
||
|
||
void WinMessagePump::Quit()
|
||
{
|
||
assert(state_);
|
||
if (state_)
|
||
state_->should_quit = true;
|
||
}
|
||
|
||
int64_t WinMessagePump::GetCurrentDelay() const
|
||
{
|
||
if (delayed_work_time_.is_null())
|
||
return -1;
|
||
|
||
// 将微妙的精度转换为毫秒
|
||
double timeout = ceil((delayed_work_time_ - TimeTicks::Now()).ToInternalValue()/1000.0);
|
||
|
||
// 如果delay的值是负的,那么表示任务需要被越快运行越好
|
||
int64_t delay = static_cast<int64_t>(timeout);
|
||
if (delay < 0)
|
||
delay = 0;
|
||
|
||
return delay;
|
||
}
|
||
|
||
}
|
||
|
||
#endif // OS_WIN
|
||
|