Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
含螺纹函数对象向量的C++误差 你知道用C++来创建包含线程函数的对象向量吗?理想情况下,该技术必须是跨平台Win/OSX,并且易于移植到移动iOS。它可以是非常基本的多线程处理,并行运行的函数非常简单,但计算量很大_C++_Multithreading_Vector_Openframeworks - Fatal编程技术网

含螺纹函数对象向量的C++误差 你知道用C++来创建包含线程函数的对象向量吗?理想情况下,该技术必须是跨平台Win/OSX,并且易于移植到移动iOS。它可以是非常基本的多线程处理,并行运行的函数非常简单,但计算量很大

含螺纹函数对象向量的C++误差 你知道用C++来创建包含线程函数的对象向量吗?理想情况下,该技术必须是跨平台Win/OSX,并且易于移植到移动iOS。它可以是非常基本的多线程处理,并行运行的函数非常简单,但计算量很大,c++,multithreading,vector,openframeworks,C++,Multithreading,Vector,Openframeworks,我正在编写一个应用程序,其中有许多属于同一类的对象,它们的数据结构相当复杂,需要并行分析:虽然主应用程序线程负责与用户交互并渲染场景,但每个对象都在单独的线程上并行分析其数据 到目前为止,我试图使用ofThread在OpenFrameworks中创建应用程序的原型,但一旦我开始创建包含线程函数的对象向量,编译器就会抛出一些奇怪的错误,请参阅下文 OpenFrameworks示例 。。。如果我实例化这个类,运行它的方法,包括线程函数,没有问题 然后创建此类的向量: // in main funct

我正在编写一个应用程序,其中有许多属于同一类的对象,它们的数据结构相当复杂,需要并行分析:虽然主应用程序线程负责与用户交互并渲染场景,但每个对象都在单独的线程上并行分析其数据

到目前为止,我试图使用ofThread在OpenFrameworks中创建应用程序的原型,但一旦我开始创建包含线程函数的对象向量,编译器就会抛出一些奇怪的错误,请参阅下文

OpenFrameworks示例

。。。如果我实例化这个类,运行它的方法,包括线程函数,没有问题

然后创建此类的向量:

// in main function
...
vector<MyClass> myList;


欢迎任何帮助

不能复制互斥体。您的push_back函数尝试在向量中创建MyClass的新实例作为temp的副本。您可以使用智能指针向量来代替。

您不能复制互斥体。您的push_back函数尝试在向量中创建MyClass的新实例作为temp的副本。您可以使用智能指针向量来代替。

在openFrameworks中,我们有一个名为ofPtr的typedef,它试图包装std::shared\u ptr。避免它,因为它可能很快就会消失。相反,我建议使用std::shared_ptr,它可用于openFrameworks当前支持的所有平台。例如:

// Your .h header file
std::vector<shared_ptr<YourClass> > vectorOfYourClassInstances;

// Your .cpp/.mm implementation file

std::shared_ptr<YourClass> yourClassInstance = std::shared_ptr<YourClass>(new YourClass);

vectorOfYourClassInstances.push_back(yourClassInstance);

// The place where you are using your class
// Iterate through using an index or an iterator
// std::vector<shared_ptr<YourClass> >::iterator ...

for(std::size_t i = 0; i < vectorOfYourClassInstances.size(); ++i)
{
    std::shared_ptr<YourClass> onOfYourClassInstances = vectorOfYourClassInstances[i];

    onOfYourClassInstances->makeItDoAThing(); // make it do a thing 
}
从向量中删除对象时,std::shared_ptr将跟踪引用的数量,并将调用类的析构函数YourClass::~YourClass{}自动为您释放内存


目前openFrameworks并不完全支持C++11,它正在积极开发中,但到时候,如果更适合您的应用程序,您可以使用C++11的std::make_共享函数和潜在的std::unique_ptr

在openFrameworks中,我们有一个名为ofPtr的typedef,它试图包装std::shared\u ptr。避免它,因为它可能很快就会消失。相反,我建议使用std::shared_ptr,它可用于openFrameworks当前支持的所有平台。例如:

// Your .h header file
std::vector<shared_ptr<YourClass> > vectorOfYourClassInstances;

// Your .cpp/.mm implementation file

std::shared_ptr<YourClass> yourClassInstance = std::shared_ptr<YourClass>(new YourClass);

vectorOfYourClassInstances.push_back(yourClassInstance);

// The place where you are using your class
// Iterate through using an index or an iterator
// std::vector<shared_ptr<YourClass> >::iterator ...

for(std::size_t i = 0; i < vectorOfYourClassInstances.size(); ++i)
{
    std::shared_ptr<YourClass> onOfYourClassInstances = vectorOfYourClassInstances[i];

    onOfYourClassInstances->makeItDoAThing(); // make it do a thing 
}
从向量中删除对象时,std::shared_ptr将跟踪引用的数量,并将调用类的析构函数YourClass::~YourClass{}自动为您释放内存

目前openFrameworks并不完全支持C++11,它正在积极开发中,但到时候,如果更适合您的应用程序,您可以使用C++11的std::make_共享函数和潜在的std::unique_ptr

我猜FastMutex不是std::vector所要求的可复制或可移动的。你可以通过在向量中存储一个智能指针而不是对象本身来实现它。std::vector有什么问题吗?我猜FastMutex是不可复制或移动的,std::vector需要这样做。通过在向量中存储智能指针而不是对象本身,您可能可以让它工作。std::vector有什么问题吗?
// in main function
...
MyClass temp;              //OK SO FAR
myList.push_back(temp);    //ERROR!
// Your .h header file
std::vector<shared_ptr<YourClass> > vectorOfYourClassInstances;

// Your .cpp/.mm implementation file

std::shared_ptr<YourClass> yourClassInstance = std::shared_ptr<YourClass>(new YourClass);

vectorOfYourClassInstances.push_back(yourClassInstance);

// The place where you are using your class
// Iterate through using an index or an iterator
// std::vector<shared_ptr<YourClass> >::iterator ...

for(std::size_t i = 0; i < vectorOfYourClassInstances.size(); ++i)
{
    std::shared_ptr<YourClass> onOfYourClassInstances = vectorOfYourClassInstances[i];

    onOfYourClassInstances->makeItDoAThing(); // make it do a thing 
}