Проблема с потоками в функции для выполнения другой функции после времени X

Я пытаюсь создать эту функцию для выполнения другой функции после X времени:

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

Я сделал инкапсуляцию Thread и инкапсуляцию Time (объекты Thread и Time).

Что я хочу сделать в псевдокоде:

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, не блокируя остальную часть выполнения и не рискуя удалить его до истечения требуемого времени.

Я совершенно потерян, любая помощь приветствуется!

0

Решение

С помощью std::thread а также лямбды, Вы можете сделать это примерно так:

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 вызов.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]