我正在尝试创建一个接受许多客户端的Winsock服务器。为了使我被告知使用一个线程的Vector.So这就是我要做的但是我得到了这个错误:
错误3错误C2064:该术语未评估为具有0个参数的函数 C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ include \ functional 1152 1服务器
我的服务器代码是这样的:
using namespace std;
int __cdecl NewClient(SOCKET ListenSocket, SOCKET ClientSocket, char *recvbuf, int recvbuflen, int iSendResult, int iResult)
vector<thread> thred;
int __cdecl main(void) {
//things
SOCKET ListenSocket=INVALID_SOCKET;
SOCKET ClientSocket=INVALID_SOCKET;
char recvbuf[DEFAULT_BUFLEN];
int recvbuflen = DEFAULT_BUFLEN;
int iSendResult=0;
int iResult;
thred.push_back(thread(NewClient,ListenSocket, ClientSocket, recvbuf, recvbuflen, iSendResult, iResult));
thred[thred.size()-1].detach();
}
int __cdecl NewClient(SOCKET ListenSocket, SOCKET ClientSocket, char *recvbuf, int recvbuflen, int iSendResult, int iResult){
//things
}
我认为错误是我试图推翻新线程的地方。这样的回击是这样使用的吗?或者我该怎么办?
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:2)
这样的推迟使用了吗?或者我该怎么办?
cppreference.com说&#34; std :: thread不是CopyConstructible或CopyAssignable,虽然它是MoveConstructible和MoveAssignable。&#34;
考虑一下:
std::vector <std::thread*> thred;
及相关调整。
另外,请考虑使用智能指针。