class ThreadGuard {
public:
ThreadGuard(std::thread &t_): t(t_) {}
~ThreadGuard()
{
if(t.joinable())
t.join();
}
private:
std::thread &t;
};
void func()
{
std::thread my_thread(f);
ThreadGuard thread_guard(my_thread);
}
Ich versuche, das ThreadGuard-Objekt zu verwenden, um zu garantieren, dass die Funktion nicht beendet wird, bis der Thread normal beendet wird. Was passiert aber, wenn kurz vor der Erstellung des thread_guard-Objekts eine Ausnahme auftritt?besteht die Möglichkeit, dass während der Variablendefinition eine Ausnahme auftritt?
Es sollte in Ordnung sein. Wenn eine Ausnahme ausgelöst wurde, bedeutet dies, dass die Thread-Konstruktion fehlgeschlagen ist und der Thread nicht ausgeführt werden sollte. Die Funktion sollte beendet werden. Ist es richtig? – songyuanyao
** - 1 ** Das 'if (t.joinable)' ist ** nicht der echte Code **. –
Entschuldigung, ich habe einen Fehler gemacht. Es sollte 'if (t.joinable())' sein. – song