【问题标题】:Creating pointer to Vector of boost::thread pointers创建指向 boost::thread 指针向量的指针
【发布时间】:2011-03-13 22:58:25
【问题描述】:

我正在尝试创建一个指针向量来提升线程对象。然后,该向量是类的成员,该类在调用类构造函数时从指针在堆上创建。它看起来像这样。


#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 并说“表达式必须是可修改的左值”。用 M_Network 向量做同样的事情时我没有问题。如果您认为这种将我的工作线程组织成一个指针向量以便我可以单独初始化和管理它们的方法是不好的,那么我想我可以使用一个线程组,但想让这个方法工作。 有什么帮助吗?谢谢。

【问题讨论】:

  • “看起来像这样”不足以说明你做错了什么。发布完整代码。
  • 你想让我发布我的整个班级吗? (50 行)
  • @JAKE6459:最好是一个最小(但完整)的版本,它仍然存在问题,但 50 行是可以的。
  • @Alf P. Steinbach:我添加了这个类(取出了很多 cmets 使其更短)。
  • @Jake 为什么要在堆上分配std::vector?在内部,它无论如何都会在堆上分配其存储空间。

标签: c++ pointers vector boost-thread


【解决方案1】:

我遇到了和你类似的错误:

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

    int B();
};

建议:不要将成员函数命名为与成员数据相同的名称。

【讨论】:

  • 在这种情况下使用短语“Face-Palm”是否合适?不过还是谢谢。
【解决方案2】:

我试图将您的问题重现为其他人的较小示例。它似乎可以在 Mac OS X 10.6 上使用 gcc 4.2.1 为我编译

#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;
}

编译和链接

g++ -I/opt/local/include -L/opt/local/lib -Wl,-rpath,/opt/local/lib -lboost_thread-mt vector.cc

【讨论】:

    猜你喜欢
    • 2012-11-29
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多