boost 学习总结

来源:互联网 发布:ubuntu 14.04 配置ip 编辑:程序博客网 时间:2024/06/07 04:11

1 boost::function

可以理解为函数指针,函数式编程风格。可以指向函数,仿函数对象,成员函数等。例如

void f(int x, int y){        cout<<"f func :---------->x + y ="<<x + y <<endl;}boost::function<void(int, int)> funcF = boost::bind(f, _1,_2);funcF(20,30);

2 boost::thread

创建boost线程, 包含函数,仿函数对象,成员函数等。

class myThread{      public:             void invoke()             {                  std::cout << "In myThread::invoke..." << std::endl;             }};myThread th;boost::thread thread_member_call(boost::bind(&myThread::invoke,&th));

常用接口: get_id()join()joinable()interrupt()detach()



3 boost::bind


4 boost::asio::deadline_timer && boost::asio



class TimerTask;DECLARE_SMART_PTR(TimerTask);class RealTask :private boost::noncopyable {public:RealTask(const TimerTask_ptr task);    void timerCallback(const boost::system::error_code& err);private:TimerTask_ptr m_task;};class TimerTask:public std::enable_shared_from_this<TimerTask>,public BaseTask {public:friend class RealTask;    TimerTask(const std::string& name): BaseTask(name){}    virtual ~TimerTask();    virtual void handleTask() = 0;        bool run(RealTask* realTask);    void schedule(boost::asio::io_service* io, long delay, long interval);    void cancel();    private:    std::shared_ptr<boost::asio::deadline_timer> m_impTimer;    long m_interval;    boost::asio::io_service* m_io;    boost::recursive_mutex  m_tsMutex;};//========================================void RealTask::timerCallback(const boost::system::error_code& err) {if (err) {LOG_DEBUG("Timer Task is canceled.");delete this;return;}bool should_be_del = true;if (m_task) {should_be_del = m_task->run(this);}if (should_be_del) {delete this;}return;}void TimerTask::schedule(boost::asio::io_service* io, long delay, long interval) {boost::lock_guard<boost::recursive_mutex> lock(m_tsMutex);    m_interval = interval;    m_io = io;    RealTask* realTask = new RealTask(shared_from_this());    m_impTimer.reset(new boost::asio::deadline_timer(*io, boost::posix_time::milliseconds(delay)));    m_impTimer->async_wait(boost::bind(&RealTask::timerCallback, realTask, boost::asio::placeholders::error));    LOG_DEBUG("Timer Task: " << getName() << " is scheduled, interval:" << delay / 1000 << "s");}bool TimerTask::run(RealTask* realTask) {bool should_be_del = true;    LOG_DEBUG("Timer Task: " << getName() << " is expired.");    {boost::lock_guard<boost::recursive_mutex> lock(m_tsMutex);if(!m_impTimer){LOG_ERROR("shared_ptr is NULL [m_impTimer]");return should_be_del;}//For periodic timerif (m_interval != 0) {m_impTimer.reset(new boost::asio::deadline_timer(*m_io, boost::posix_time::milliseconds(m_interval)));m_impTimer->async_wait(boost::bind(&RealTask::timerCallback, realTask, boost::asio::placeholders::error));LOG_DEBUG("Timer Task: " << getName() << " is scheduled, interval:" << m_interval / 1000 << "s");should_be_del = false;}    }    handleTask();    return should_be_del;};void TimerTask::cancel() {boost::lock_guard<boost::recursive_mutex> lock(m_tsMutex);    if(!m_impTimer)    {    LOG_ERROR("shared_ptr is NULL [m_impTimer]");    return;    }    m_impTimer->cancel();}






0 0
原创粉丝点击