Создание указателя на вектор boost :: thread указателей - PullRequest
0 голосов
/ 14 марта 2011

Я пытаюсь создать вектор указателей для увеличения потоковых объектов.Этот вектор является членом класса, который создается в куче из указателя при вызове конструктора класса.Это выглядит примерно так:


#ifndef NETWORKSYSTEM_H
#define NETWORKSYSTEM_H
#include "Network.h"
#include "Misc.h"
#include "Enumerators.h"
#include &lt vector>
#include &lt boost\thread.hpp>
#include &lt boost\filesystem.hpp>
#include &lt string>
#include &lt iostream>
class NetworkSystem
{
private:
    Status NetworkStatus;
    boost::filesystem3::path *ProjectPath;
    std::string ProjectName;
    //vector for pointers to networks
    std::vector&lt Network*> *M_Network;
    //Threading Components
    boost::thread *MainThread;
    std::vector&lt boost::thread *> *WorkerThreads;
    void MainThreadFunction();
    void WorkerThreadFunction();
public:
    NetworkSystem();
    ~NetworkSystem();
    int SetWorkerThreads(int P_WorkerThreads, bool Wait);
    int TotalNetworks();
    int WorkerThreads();
    int PauseAtNetworksCompletion(bool Wait);
    int PauseAtGenerationsCompletion(bool Wait);
};
#endif

// class constructor
NetworkSystem::NetworkSystem()
{
    ProjectPath = new boost::filesystem3::path();
    M_Network = new std::vector&lt Network*>;
    WorkerThreads = new std::vector&lt boost::thread*>;
    NetworkStatus = NO_PROJECT_OPEN;
    MainThread = new boost::thread(&NetworkSystem::MainThreadFunction, this);
};

Visual C ++ 2010 выдает мне ошибки с вектором указателя boost :: thread.Он подчеркивает WorkerThreads в конструкторе и говорит, что «выражение должно быть изменяемым lvalue».У меня нет проблем, когда я делаю то же самое с вектором M_Network.Если вы считаете, что такой подход к организации моих рабочих потоков в вектор указателей, чтобы я мог инициализировать их и управлять ими по отдельности, плох, то я полагаю, что я МОГУ использовать группу потоков, но хотел бы, чтобы этот метод работал.Любая помощь?Спасибо.

Ответы [ 2 ]

1 голос
/ 14 марта 2011

Я получил ошибку, похожую на вашу:

class A
{
    int B;
public:
    A()
    {
        B = 0;
    }

    int B();
};

Совет: не называйте ваши функции-члены тем же именем, что и ваши данные участника.

0 голосов
/ 14 марта 2011

Я пытался воспроизвести вашу проблему в меньшем примере для других.Мне кажется, что для меня это компилируется с помощью gcc 4.2.1 на Mac OS X 10.6

#include <vector>
#include <boost/thread.hpp>

class Foo
{
public:
    Foo()
    {
        WorkerThreads = new std::vector<boost::thread*>;
    }

private:
    std::vector< boost::thread *> *WorkerThreads;
};

int
main()
{
    const Foo foo;
}

compile & link

g++ -I/opt/local/include -L/opt/local/lib -Wl,-rpath,/opt/local/lib -lboost_thread-mt vector.cc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...