знаете ли вы какой-либо метод (С++) для создания вектора объектов, содержащих многопоточную функцию? В идеале метод должен быть кроссплатформенным (Win/OSX) и легко переносимым на мобильные устройства (iOS). Это может быть очень простая многопоточность, функция, которую нужно запускать параллельно, довольно проста (но требует больших вычислительных ресурсов).
Я пишу приложение со многими объектами (принадлежащими одному классу) с довольно сложной структурой данных, которую необходимо анализировать параллельно: в то время как основной поток приложения заботится о взаимодействии с пользователем и рендеринге сцены, каждый объект получает свою данные анализируются параллельно в отдельных потоках.
До сих пор я пытался создать прототип приложения в OpenFrameworks (используя ofThread), но как только я начинаю создавать вектор объектов, содержащих многопоточную функцию, компилятор выдает несколько странных ошибок (см. ниже для справки).
(пример OpenFrameworks)
class MyClass: public ofThread
{
int A, B, C;
void threadedFunction();
MyClass();
}
... если я создаю экземпляр класса (запускаю его методы, включая многопоточную функцию), проблем нет.
Затем я создаю вектор этого класса:
// in main function
...
vector<MyClass> myList;
... но теперь, как только я пытаюсь добавить экземпляр класса в вектор, компилятор не сообщает, что он не может получить доступ к членам privte в классе Poco:FastMutex (utils\ofthread.h(190): ошибка C2248: "Poco::FastMutex::FastMutex": невозможно получить доступ к частному члену, объявленному в классе "Poco::FastMutex" и Poco:Thread (utils\ofthread.h(190): ошибка C2248: "Poco::Thread::Thread ' : невозможно получить доступ к частному члену, объявленному в классе 'Poco::Thread')
// in main function
...
myList.push_back(MyClass()); //ERROR!
.
// in main function
...
MyClass temp; //OK SO FAR
myList.push_back(temp); //ERROR!
Любая помощь приветствуется!
FastMutex
нельзя копировать (или перемещать), что требуется дляstd::vector
. Вероятно, вы можете заставить его работать, сохранив интеллектуальный указатель в векторе, а не в самом объекте. - person Jonathan Potter   schedule 25.11.2013std::vector<std::thread>
? - person juanchopanza   schedule 25.11.2013