当您在C++类中使用std::thread时,需要注意以下几点,以避免成员变量被意外清除:
#include <iostream>
#include <thread>
class MyClass {
public:
MyClass() : m_thread(&MyClass::myFunction, this) {}
~MyClass() {
if (m_thread.joinable()) {
m_thread.join();
}
}
private:
void myFunction() {
std::cout << "Thread is running" << std::endl;
}
std::thread m_thread;
};
int main() {
{
MyClass obj;
// 确保在离开作用域之前,线程已经完成执行
}
return 0;
}
#include <iostream>
#include <thread>
class MyClass {
public:
void startThread() {
std::thread t(&MyClass::myFunction, this);
if (t.joinable()) {
m_thread = std::move(t);
}
}
~MyClass() {
if (m_thread.joinable()) {
m_thread.join();
}
}
private:
void myFunction() {
std::cout << "Thread is running" << std::endl;
}
std::thread m_thread;
};
int main() {
MyClass obj;
obj.startThread();
// 确保在离开作用域之前,线程已经完成执行
return 0;
}
#include <iostream>
#include <thread>
class MyClass {
public:
void myFunction() {
std::thread t(&MyClass::threadFunction, this);
// 在方法结束之前加入线程
t.join();
}
private:
void threadFunction() {
std::cout << "Thread is running" << std::endl;
}
};
int main() {
MyClass obj;
obj.myFunction();
return 0;
}
总之,当您在类中使用std::thread时,需要确保线程对象的生命周期与类的实例相同,并在适当的时候加入(join)或分离(detach)线程。这样可以避免成员变量被意外清除。
领取专属 10元无门槛券
手把手带您无忧上云