Cxx11使用bind綁定類的普通成員函數
類的定義如下:
class
pg_stask_bizmsg
{
public:
????pg_stask_bizmsg();
????virtual ~pg_stask_bizmsg();
protected:
????//任務初始化
????virtual
void
on_init();
????//任務回收
????virtual
void
on_finalize();
????//任務運行邏輯
????//任務錯誤處理
????virtual
void
on_error();
public:
????void
thread_func_point(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綁定類的普通成員函數