Mein Ziel ist es, ein std::thread
Objekt als Datenelement zu behalten und es bei Bedarf zu initialisieren.
Ich kann dies nicht (wie in meinem Code unten), weil der Kopierkonstruktor der Klasse std::thread
gelöscht wird. Gibt es einen anderen Weg, es zu tun?Ist es möglich einen std :: thread zu definieren und später zu initialisieren?
class MyClass
{
public:
MyClass():DiskJobThread(){};
~MyClass();
void DoDiskJobThread();
private:
int CopyThread(const std::wstring & Source, const std::wstring & Target);
int MoveThread(const std::wstring & Source, const std::wstring & Target);
std::thread DiskJobThread;
};
MyClass::~MyClass()
{
DiskJobThread.join();
}
void MyClass::DoDiskJobThread()
{
std::wstring Source = GetSource();
std::wstring Target = GetTarget();
int m_OperationType = GetOperationType();
if (m_OperationType == OPERATION_COPY)
{
DiskJobThread = std::thread(&MyClass::CopyThread, *this, Source, Target);
}
else if (m_OperationType == OPERATION_MOVE)
{
DiskJobThread = std::thread(&MyClass::MoveThread, *this, Source, Target);
}
}
Führen Sie "this" statt der Dereferenzierung '* this'. –