[英]std::thread calling class methods
我有一個小class:
class MyData{
Struct1* pS;
public:
MyData() {
pS=new Struct1;
}
void saveData(Struct1* st) {
*pS = *st;
}
void printData() {
//print the struct
}
};
我想從需要在后台運行的線程修改結構(調用 saveData),而程序有時可能會調用 printData。
我現在有這個,但我不知道它是否是線程安全的。
void myFunction(MyData* data) {
while(1){
data->saveData(someStruct);
}
}
int main{
MyData *data = new MyData() ;
std::thread th_object(myFunction, data) ;
// more code
data->printData() ;
}
我還需要一種方法來在程序結束時停止線程。
#include <mutex>
#include <thread>
#include <atomic>
struct Struct1 {};
class MyData {
Struct1 pS;
std::mutex m_;
public:
void saveData(Struct1* st) {
std::unique_lock<std::mutex> lock(m_);
pS = *st;
}
void printData() {
std::unique_lock<std::mutex> lock(m_);
Struct1 copy = pS;
lock.unlock();
// print copy
}
};
void myFunction(MyData* data, std::atomic<bool>* stop) {
while(!*stop) {
Struct1 s;
data->saveData(&s);
}
}
int main() {
MyData data;
std::atomic<bool> stop{false};
std::thread th_object(myFunction, &data, &stop) ;
data.printData();
stop = true;
th_object.join();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.