C++ 函数中的线程在X时间后执行另一个函数时出现问题

C++ 函数中的线程在X时间后执行另一个函数时出现问题,c++,multithreading,time,pthreads,pseudocode,C++,Multithreading,Time,Pthreads,Pseudocode,我试图创建此函数,以便在X时间后执行另一个函数: void execAfter(double time, void *(*func)(void *), t_params *params); 我做了线程封装和时间封装(对象线程和时间) 我想在伪代码中执行的操作: Call execAfter instantiate Thread call thread->create(*funcToExec, *params, timeToWait) [inside thre

我试图创建此函数,以便在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 ;
调用execAfter
实例化线程
调用线程->创建(*funcToExec,*params,timeToWait)
[内螺纹,后螺纹]
实例化时间对象
等待X时间
exec funcToExec
删除时间对象
[离开线程,返回到execAfter]
使用和删除线程对象,可以执行如下操作:

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();
}
void execAfter(常数int毫秒,标准::函数func,void*param)
{
标准::线程线程([=](){
std::this_thread::sleep_for(std::chrono::毫秒(毫秒));
func(param);
});
//使新线程与父线程“分离”
thread.detach();
}

您正在寻找的“魔力”就是调用。

这不会阻止程序的主执行吗?@Mayerz否,它会“分离”新线程以完全独立于创建线程运行。你甚至不必加入线程(你也不应该加入)。那么调用代码后,所有内存都会自动释放?@Mayerz all memory关于线程本身。当然,您必须释放线程中分配的任何内存。@Mayerz它是lambda捕获的一部分,意思是“按值捕获所有内容”。