我正在尝试通过成员函数进行线程调用。问题是我在同一个类的另一个成员函数内进行调用。我的意思是:
class A {
void foo(int a);
void bar() {
int k = 2;
thread t(&A::foo, this, k);
}
}
我还尝试将this
作为参考传递:&this
或std::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 ==========
答案 0 :(得分:-1)
问题是
vector<thread> QFSThreads;
不允许复制std :: thread。
@see http://www.cplusplus.com/reference/thread/thread/thread/