正在尝试创建线程以将消息发送到套接字。得到2个与线程构造函数有关的错误

问题描述 投票:0回答:1

我正在尝试创建一个线程,以便向打开的套接字发送消息。我遇到2个具体错误。

E0289:没有构造函数“ std :: thread :: thread”的实例与参数列表匹配。

C2661:'std :: thread :: thread'没有重载的函数带有2个参数**

我已经找到了与此类似的帖子,但仍然不能完全弄清楚是否可以使用一些说明。

#include <WS2tcpip.h>
#include <string>
#include <thread>

using namespace std;

#pragma comment (lib, "ws2_32.lib")

void SendMessage(string message)
{
    WSAData data;
    WORD version = MAKEWORD(2, 2);
    int wsOk = WSAStartup(version, &data);
    if (wsOk != 0)
    {
        cout << "Failed, Error Code: " << WSAGetLastError() << endl;
    }

    sockaddr_in user;
    user.sin_family = AF_INET;
    user.sin_port = htons(3514);
    inet_pton(AF_INET, "127.0.0.1", &user.sin_addr);

    SOCKET out = socket(AF_INET, SOCK_DGRAM, 0);

    int sendMsg = sendto(out, message.c_str(), message.size() + 1, 0, (sockaddr*)&user, sizeof(user));

    if (sendMsg == SOCKET_ERROR)
    {
        cout << "Failed, Error: " << WSAGetLastError() << endl;
    }

    closesocket(out);
    WSACleanup();
}

int main()
{
    string message = "";
    cout << "Enter a message to send: ";
    cin >> message;

    thread sendtoSocket (SendMessage, message);

    sendtoSocket.join();

    system("pause");
    return 0;
}
c++ multithreading
1个回答
0
投票

Windows has a SendMessage macro,根据是否启用unicode在SendMessageSendMessageA功能之间透明切换。此宏替换使您的SendMessageW函数踩踏了。

您可以添加

SendMessage

之后的任何地方>

#undef SendMessage

但是稍后可能会导致问题。我认为最好将#include <WS2tcpip.h> 函数的名称更改为不会冲突的名称。

© www.soinside.com 2019 - 2024. All rights reserved.