以前在 32 位 windows 上工作的32位 windows c++ 应用程序现在需要在 64 位 windows 机器上使用。使用 VisualStudio2008。呼叫是
SetTimer(m_hWnd, nTimerID, nElapse, *pReceiver)
可以在WinUser.h
.
我在编译时将预处理器定义从更改WIN32
为。WIN64
应用程序在 64 位 pc 上编译和运行,但没有触发回调(应用程序行为使这一点很明显)。
有没有办法让它工作?
class DelayedAction
{
public:
DelayedAction( int expirePeriod, boost::function<void()> callback ):
work( service),
thread( boost::bind( &DelayedAction::run, this)),
timer( service),
m_callback(callback),
m_expirePeriod(expirePeriod)
{}
~DelayedAction()
{
thread.join();
}
void startTimer()
{
}
void on_some_event()
{
startAfter(m_expirePeriod);
}
void stop()
{
timer.cancel();
}
void startAfter( const size_t delay)
{
// no need to explicitly cancel
// timer.cancel();
timer.expires_from_now( boost::posix_time::seconds( delay) );
timer.async_wait( boost::bind( &DelayedAction::action, this, boost::asio::placeholders::error));
}
private:
void run()
{
service.run();
}
// ...
void action(const boost::system::error_code& e)
{
if(e != boost::asio::error::operation_aborted)
std::cout << "action" << std::endl;
m_callback();
}
int m_expirePeriod;
boost::function<void()> m_callback;
boost::asio::io_service service;
boost::asio::io_service::work work;
boost::thread thread;
boost::asio::deadline_timer timer;
};