C++ 函数中的线程在X时间后执行另一个函数时出现问题
我试图创建此函数,以便在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
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捕获的一部分,意思是“按值捕获所有内容”。