c++ - 如何在 C++ 中正确创建线程类的子类(std::thread 的子类)

标签 c++ multithreading visual-studio-2012 c++11

我正在尝试创建一个 Parallel 类,它是 std::thread 的子类,因此我的类在 Parallel.h 中定义>,但主要方法在同一项目(在 visual studio 中)的单独文件 main.cpp 中定义。当我创建 Parallel 的实例并执行 join( ) main() 方法中的函数如下代码段: 我是 C++ 新手,这里是“Parallel.h”-

#include<thread>
using namespace std;
namespace Para{
class Parallel:thread
{
public:

    static void run(){

    }
    Parallel(void)
    {
    }

    virtual ~Parallel(void)
    {
    }

    inline static void start(Parallel* p){
                // (*p).join();
    }

    virtual void Parallel::start(thread& t){

    }
    static void parallelize(Parallel& p1,Parallel& p2){

    }
    inline virtual Parallel* operator=(thread* t){
        return  static_cast<Parallel*>(t);
    }
}

//在main.cpp中

void main(){

    Parallel p;
    p.join();
    thread t(print);
     t.join();
     system("Pause");

}

问题是如何定义一个线程类的适当子类,它有一个以函数名作为参数的重载构造函数,也 当定义 p.join() 时,编译器在 VS2012 中出现以下错误:

Error 2 error C2247: 'std::thread::join' not accessible because 'Para::Parallel' uses 'private' to inherit from 'std::thread' C:\Users\Gamer\Desktop\PROJECQ\VC++@OMAQ\CQ47\CQ47\main.cpp 11

3 IntelliSense: function "std::thread::join" (declared at line 209 of "H:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\thread") is inaccessible c:\Users\Gamer\Desktop\PROJECQ\VC++@OMAQ\CQ47\CQ47\main.cpp 11

最佳答案

当你尝试调用'p.join()'时出现关于“uses 'private' to inherit”的错误是因为你写了:

    class Parallel:thread

什么时候你应该写:

    class Parallel : public thread

默认是私有(private)继承,这意味着基类的所有方法在继承类上都是私有(private)的。如果您希望它们可访问,则必须指定继承应该是公开的。

关于c++ - 如何在 C++ 中正确创建线程类的子类(std::thread 的子类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19210120/

相关文章:

c++ - 扩展 Eigen 库以包含排序

visual-studio-2012 - OpenNI 2和Visual Studio 2012

php - C++ 轻量级 linux web 直通服务器

c++ - 如何在可能不存在的目录中创建文件?

objective-c - @synchronized 不适用于 NSMutableArray

python - 如何在同一 .py 中但在不同端口上对客户端和服务器进行多线程处理

sql - Visual Studio 2012 片段快捷方式不适用于 SQL

unit-testing - Visual Studio 2012 代码覆盖部分接触区域

c++ - 是否可以在 C 程序中包含 C++ 库?

c# - 在后台工作线程中使用 C# 全局变量是否安全