线程向量

时间:2016-04-21 15:40:18

标签: c++ multithreading vector server winsock

我正在尝试创建一个接受许多客户端的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
    }

我认为错误是我试图推翻新线程的地方。这样的回击是这样使用的吗?或者我该怎么办?

任何帮助将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分:2)

  

这样的推迟使用了吗?或者我该怎么办?

cppreference.com说&#34; std :: thread不是CopyConstructible或CopyAssignable,虽然它是MoveConstructible和MoveAssignable。&#34;

考虑一下:

std::vector <std::thread*> thred;  

及相关调整。

另外,请考虑使用智能指针。