Sto cercando di aggiungere un ciclo semplice con i thread, ma ancora qualcosa non sta funzionando. Ho controllato una serie di motivi e non riesco a trovare alcuna soluzione.Errori con multithreading nel ciclo for
Ho una classe semplice con due metodi A()
e B()
. Dall'altra classe, chiamo il metodo A()
. Questo è come appare:
void MyClass::A()
{
std::vector<std::thread> threads;
for(int i=0;i<2;i++)
{
threads.push_back(std::thread(&MyClass::B, this));
}
for(auto &t : threads)
{
if(t.joinable())
t.join();
}
}
void MyClass::B()
{
}
Eppure sto ancora ricevendo alcuni errori:
#0 ?? ??() (??:??)
#1 00446D62 pthread_create_wrapper() (??:??)
#2 75327FB0 msvcrt!_cexit() (C:\Windows\SysWOW64\msvcrt.dll:??)
#3 040C8710 ??() (??:??)
#4 753280F5 msvcrt!_beginthreadex() (C:\Windows\SysWOW64\msvcrt.dll:??)
#5 75B17C04 KERNEL32!BaseThreadInitThunk() (C:\Windows\SysWOW64\kernel32.dll:??)
#6 77ABAB8F ??() (??:??)
#7 77ABAB5A ??() (??:??)
#8 ?? ??() (??:??)
Qualcuno ha idea di cosa è sbagliato?
Solo per aggiungere un'altra cosa. Questo:
void MyClass::A()
{
std::thread t(&MyClass::B, this);
if(t.joinable())
t.join();
}
void MyClass::B()
{
}
funziona senza problemi.
@davmac Ci stavo anche pensando, prendendo in considerazione qualcosa come 'std :: move()', ma guardando attraverso molti esempi online e post SO penso che sia possibile. – sebap123
Vorrei usare 'threads.emplace_back (std :: move (std :: thread (& MyClass :: B, this)));' – knivil
@davmac, OP non sta copiando, OP si sta muovendo. – SergeyA