dimanche 12 mars 2017

Boost deadline_timer is not generating event when i am using expire_at?

class header file //dividandconquer.h

#ifndef DIVIDANDCONQUER_H
#define DIVIDANDCONQUER_H
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/date.hpp>
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/asio.hpp>
#include <boost/bind.hpp>
using namespace boost::posix_time;
using namespace boost::gregorian;


class dividandconquer
{
public:
    dividandconquer(boost::asio::io_service& io);
    int lb =0;
    int ub =1000;
    int mb =0;
    ptime t1;
    ptime finaltimer;
    void  reset(int);

     void print();
private:
  boost::asio::deadline_timer timer_;
  int count_;
};

#endif // DIVIDANDCONQUER_H

inside constructor i am trying to trigger timer at specific time(using expire_at) but its not working. But if i am using expires_from_now it works fine.

File name :dividandconquer.cpp

#include "dividandconquer.h"

dividandconquer::dividandconquer(boost::asio::io_service& io)
    : timer_(io),
      count_(0)
  {
    t1=ptime( (boost::gregorian::day_clock::local_day()), hours(15)+minutes(12));
    timer_.expires_at(t1);
    timer_.async_wait(boost::bind(&dividandconquer::print, this));

  }
void dividandconquer::reset(int upordown)// 0 means lowebound 1 means uperbound
{
    if (mb>0)
    {
        if (0==upordown)
        {    mb=(lb+ub)/2;
            ub=mb;
        }
        else
        {
            mb=(ub-lb)/2;
            lb=mb;
        }

    }
}
void dividandconquer::print()
{
  if (count_ < 5)
  {
    std::cout << count_ << "\n";
    ++count_;

  //timer_.expires_at(timer_.expires_at() + boost::posix_time::seconds(1));
//  timer_.async_wait(boost::bind(&printer::print, this));
  }
}

main file

#include <QApplication>
#include "dividandconquer.h"
#include <boost/asio.hpp>
int main(int argc, char *argv[])
{

   boost::asio::io_service io;
   dividandconquer d1(io);
   io.run();


    return 0;
}

Aucun commentaire:

Enregistrer un commentaire