以 class 对象和结构对象 c++ 开始线程
Begin thread with class object and struct object c++
我对 c++ 很陌生,我不太了解如何克服这个问题。
本质上,我有一个 Base class 和 2 个派生的 classes。我有第四个 'processing' class.
我需要创建三个线程,两个派生的 classes 生成数据,'processing' class 根据这些数据进行自己的计算。
我希望两个派生的 classes 将结果放在一个结构中,然后处理 class 访问该结构。
我在开始线程时遇到问题,因为我需要给它派生 class 的对象和数据结构的对象,但它无法正常工作。
这差不多是我所拥有的。
#include <cstdio>
#include <iostream>
#include <random>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <chrono>
#include <ctime>
#define _USE_MATH_DEFINES
#include <math.h>
#include <time.h>
#include <iostream>
#include <thread>
#include <atomic>
#include <vector>
#include <mutex>
using namespace std;
struct Test_S
{
vector<double> test_vector1;
vector<double> test_vector2;
mutex test_mtx;
};
class Base
{
public:
Base();
void domath() {cout<<"base function"<<endl;}
int i;
};
class Derived1 : public Base
{
public:
Derived1();
void domath1()const {test_s.test_vector1.push_back(1);}
};
class Derived2 : public Base
{
public:
Derived2();
void domath2()const {test_s.test_vector2.push_back(2);}
};
int main( int argc, char ** argv )
{
Base base;
Derived1 derived1;
Derived2 derived2;
Test_S test_s;
std::thread t1(&Derived1::domath1, &test_s);
std::thread t2(&Derived2::domath2, &test_s);
t1.join();
t2.join();
}
您正在使用的 std::thread
的构造函数采用指向成员函数的指针,因此第二个参数需要是 class 的实例,这是调用成员函数所必需的.
在 t1
和 t2
的情况下,第二个参数可以分别是 &derived
和 &derived2
。
关于传递给 std::thread
的函数所使用的 test_s
,您将需要一种方法将该状态传递给那些 classes。您可以将状态作为参数传递给传递给 std::thread
.
的函数
仅供说明:
void domath1(Test_S* test_s) const { test_s->test_vector1.push_back(1); }
...
std::thread t1(&Derived1::domath1, &derived1, &test_s);
我对 c++ 很陌生,我不太了解如何克服这个问题。 本质上,我有一个 Base class 和 2 个派生的 classes。我有第四个 'processing' class.
我需要创建三个线程,两个派生的 classes 生成数据,'processing' class 根据这些数据进行自己的计算。
我希望两个派生的 classes 将结果放在一个结构中,然后处理 class 访问该结构。
我在开始线程时遇到问题,因为我需要给它派生 class 的对象和数据结构的对象,但它无法正常工作。 这差不多是我所拥有的。
#include <cstdio>
#include <iostream>
#include <random>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <chrono>
#include <ctime>
#define _USE_MATH_DEFINES
#include <math.h>
#include <time.h>
#include <iostream>
#include <thread>
#include <atomic>
#include <vector>
#include <mutex>
using namespace std;
struct Test_S
{
vector<double> test_vector1;
vector<double> test_vector2;
mutex test_mtx;
};
class Base
{
public:
Base();
void domath() {cout<<"base function"<<endl;}
int i;
};
class Derived1 : public Base
{
public:
Derived1();
void domath1()const {test_s.test_vector1.push_back(1);}
};
class Derived2 : public Base
{
public:
Derived2();
void domath2()const {test_s.test_vector2.push_back(2);}
};
int main( int argc, char ** argv )
{
Base base;
Derived1 derived1;
Derived2 derived2;
Test_S test_s;
std::thread t1(&Derived1::domath1, &test_s);
std::thread t2(&Derived2::domath2, &test_s);
t1.join();
t2.join();
}
您正在使用的 std::thread
的构造函数采用指向成员函数的指针,因此第二个参数需要是 class 的实例,这是调用成员函数所必需的.
在 t1
和 t2
的情况下,第二个参数可以分别是 &derived
和 &derived2
。
关于传递给 std::thread
的函数所使用的 test_s
,您将需要一种方法将该状态传递给那些 classes。您可以将状态作为参数传递给传递给 std::thread
.
仅供说明:
void domath1(Test_S* test_s) const { test_s->test_vector1.push_back(1); }
...
std::thread t1(&Derived1::domath1, &derived1, &test_s);