-1

以前在 32 位 windows 上工作的32位 windows c++ 应用程序现在需要在 64 位 windows 机器上使用。使用 VisualStudio2008。呼叫是

SetTimer(m_hWnd, nTimerID, nElapse, *pReceiver)

可以在WinUser.h.

我在编译时将预处理器定义从更改WIN32为。WIN64应用程序在 64 位 pc 上编译和运行,但没有触发回调(应用程序行为使这一点很明显)。

有没有办法让它工作?

4

1 回答 1

0
 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;


 };
于 2013-01-11T14:13:25.380 回答