0

我正在尝试创建此函数以便在 X 时间后执行另一个函数:

void            execAfter(double time, void *(*func)(void *), t_params *params);

我做了一个线程封装和一个时间封装(对象线程和时间)。

我想用伪代码做什么:

Call execAfter
  instantiate Thread
  call thread->create(*funcToExec, *params, timeToWait)
[inside thread, leaving execAfter]
  instanciate Time object
  wait for X time
  exec funcToExec
  delete Time object
[leaving thread, back to execAfter]
  delete Thread object              <---- probleme is here, see description below.
  return ;

如何正确删除我的 Thread 对象,而不会阻塞其余的执行,也不会冒险在所需时间过去之前删除它。

我很迷茫,任何帮助表示赞赏!

4

1 回答 1

1

使用std::threadlambdas,你可以这样做:

void execAfter(const int millisecs, std::function<void(void*)> func, void* param)
{
    std::thread thread([=](){
        std::this_thread::sleep_for(std::chrono::milliseconds(millisecs));
        func(param);
    });

    // Make the new thread "detached" from the parent thread
    thread.detach();
}

您正在寻找的“魔法”就是detach电话。

于 2013-05-15T11:31:29.760 回答