mardi 30 janvier 2018

Pointer references in Lambda

struct taskinfo
{
        long int id;
        bool cancel;
        std::function<void()> func;
        std::chrono::system_clock::time_point time;
        std::chrono::system_clock::duration interval;
}

....

std::priority_queue<taskinfo, std::vector<taskinfo>> tasks;
void at(taskinfo** task){
        std::function<void()> threadFunc = [task]() { std::thread((*task)->func).detach(); };
        (*task)->func = threadFunc;
        tasks.push(**task);
}

I think I am missing something here when I pop the function out of the queue to execute, the function may be empty, Nothing is getting executed.

If i copy taskinfo to locally

void at(taskinfo** task){
            taskinfo t = **task;
            //Replace everything else with t function works fine But 
            //I need to modify the same reference
}

How can I work with pointer reference herein lambda?

Aucun commentaire:

Enregistrer un commentaire