Imaginez un tel code, qui crée la fonction lambda et le passe à un autre thread à exécuter (méthode schedule_task_in_thread attendez Functor comme seul paramètre). Que se passe-t-il exactement à l'objet o? Y at-il une copie temporaire créée jusqu'à l'exécution de la méthode ? Le wait() s'assure que l'appel est bloqué.Objet passé en pointeur de fonction vers un autre thread - comment est-il géré?
#define INVOKE_IN_MYTHREAD(method_name, ...) \
return schedule_task_in_thread([&](){ return mythread->method_name(__VA_ARGS__); }).wait().
void do_something(MyObject o){
INVOKE_IN_MYTHREAD(method, o);
}
Le problème est que la méthode de mythread->() rapporte l'objet o soit légèrement différent de ce qu'il était en do_something(). J'ai essayé d'attraper tout {copy | default | move} {constructeur | affectations} mais je ne les vois pas être appelés.
class MyObject{
uint32_t a;
std::string b;
CryptoPP::Integer c;
}
Fields un et b sont transmis correctement, le champ c est réglé sur Integer (0). Des idées?
S'il vous plaît fournir un (http://stackoverflow.com/help/mcve) [MCVE] – tkausl
va essayer de créer un, mais cela est assez complexe environnement , donc ça va prendre du temps. – ejossev