小编use*_*501的帖子

使用std :: bind进行函数回调会导致分段错误

我有一个类(我们称之为"Common"),它用于创建计时器,并在计时器到期时从另一个类调用成员函数(让我们称之为"A").一般的想法是这样的: - A从Common调用一个函数,传递一个指向成员函数的指针,该函数将在计时器到期时执行 - Common将指针存储在带有计时器id键的映射中的函数中 - 当计时器命中,搜索映射以查找匹配的键,然后调用相关的函数.

这是A的代码:

void A::setTimer()
{ 
   std::function<void(void)> handler = std::bind(&A::onEventFunc, this);
   pCommon->scheduleTimer(&handler);
}
Run Code Online (Sandbox Code Playgroud)

onEventFunc是A类的公共函数,它在计时器到期时执行某些操作.

以下是Common的代码:

static void timerHandler(int sig, siginfo_t *si, void uc)
{
   map<timer_t*, std::function<void>(void)>*)::iterator iter = 
                                globalTimerMap.find((timer_t*)si->si_value.sival_ptr);
   if (iter != globalTimerMap.end)
   {
      std::function<void>(void)>* handler = iter->second;
      (*handler)();
   }
}

Common::schedulerTimer(std::function<void>(void)* handler)
{
   // uses Linux timer_create and timer_settime
   // code for these excluded EXCEPT the relevant lines
   sa.sa_sigaction = timerHandler;

   // bunch of other code here for timer_create and timer_settime

   // insert into …
Run Code Online (Sandbox Code Playgroud)

c++ boost

3
推荐指数
1
解决办法
1531
查看次数

标签 统计

boost ×1

c++ ×1