繁体   English   中英

C ++ std :: thread在当前类内部传递成员函数

[英]C++ std::thread passing member function inside current class

我试图通过成员函数进行线程调用。 问题是我在同一类的另一个成员函数中进行调用。 我的意思是:

class A {
   void foo(int a);

   void bar() {
       int k = 2;
       thread t(&A::foo, this, k);
   }
}

我还尝试将this作为参考传递: &thisstd::ref(this)但没有成功。 我的错误到底是什么?

编辑:下面是给我错误的实际代码

class SUBTHREAD {
public:
    SUBTHREAD(const SOCKET client, const int ID, MAINTHREAD *Server);

    void handleQFStreaming(const vector<string> &splitMessage);
    void handleIncoming(const string &message, const int &length);
    void run();

private:
    MAINTHREAD *Server;
    SOCKET client;
    vector<thread> QFSThreads;
    int ID;

};

void SUBTHREAD::handleQFStreaming(const vector<string> &splitMessage) {
     ...
}

void SUBTHREAD::handleIncoming(const string &message, const int &length) {
     ...
     QFSThreads.push_back(thread(&SUBTHREAD::handleQFStreaming, this, splitMessage));
     ...
}

编辑:我得到的整个错误是:

1>------ Build started: Project: BankServer, Configuration: Debug Win32 ------
1>  bserver.cpp
1>c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0(593): error C2280: 'std::thread::thread(const std::thread &)' : attempting to reference a deleted function
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\thread(70) : see declaration of 'std::thread::thread'
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0(592) : while compiling class template member function 'void std::allocator<_Ty>::construct(_Ty *,const _Ty &)'
1>          with
1>          [
1>              _Ty=std::thread
1>          ]
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0(723) : see reference to function template instantiation 'void std::allocator<_Ty>::construct(_Ty *,const _Ty &)' being compiled
1>          with
1>          [
1>              _Ty=std::thread
1>          ]
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\type_traits(572) : see reference to class template instantiation 'std::allocator<_Ty>' being compiled
1>          with
1>          [
1>              _Ty=std::thread
1>          ]
1>          c:\program files (x86)\microsoft visual studio 12.0\vc\include\vector(650) : see reference to class template instantiation 'std::is_empty<_Alloc>' being compiled
1>          with
1>          [
1>              _Alloc=std::allocator<std::thread>
1>          ]
1>          e:\programming\workspace\visual studio 2013\projects\bankserver\bankserver\bserver.h(63) : see reference to class template instantiation 'std::vector<std::thread,std::allocator<_Ty>>' being compiled
1>          with
1>          [
1>              _Ty=std::thread
1>          ]
1>  Generating Code...
1>  Compiling...
1>  main.cpp
1>  Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

问题是

vector<thread> QFSThreads;

不允许复制std :: thread。

@请参阅http://www.cplusplus.com/reference/thread/thread/thread/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM