1. 程式人生 > >Cxx11使用bind綁定類的普通成員函數

Cxx11使用bind綁定類的普通成員函數

final his 錯誤處理 ack dconf make family conf con


類的定義如下:
class pg_stask_bizmsg
{
public:
????pg_stask_bizmsg();
????virtual ~pg_stask_bizmsg();
protected:
????//任務初始化
????virtual void on_init();
????//任務回收
????virtual void on_finalize();
????//任務運行邏輯

????virtual void on_execute();
????//任務錯誤處理
????virtual void on_error();
public:
????void thread_func_point(tbizremindconfig& conf);
????void thread_func_cycle(tbizremindconfig& conf);
private:
????map<std::thread::id, tbizremindconfig> m_conf;

};
需要在on_execute()函數中開啟其他線程來執行任務
//任務運行邏輯
void pg_stask_bizmsg::on_execute()
{
????if (conf.i_tr_exec_mode == 1)
????{
????????std::thread t(std::bind(&pg_stask_bizmsg::thread_func_cycle, this, conf));
????????m_conf.insert(make_pair(t.get_id(), conf));
????????t.detach();
????}
????else if (conf.i_tr_exec_mode == 2)
????{
????????std::thread t(std::bind(&pg_stask_bizmsg::thread_func_point, this, conf));
????????m_conf.insert(make_pair(t.get_id(), conf));
????????t.detach();
????}
????else
????{
????????LOGDEBUG("");
????}
}

使用要點:

1、在使用bind函數將類的普通成員函數綁定為線程執行函數時,需要在綁定時第一個參數專遞this指針;

2、

Cxx11使用bind綁定類的普通成員函數