我正在尝试创建一个线程,以便向打开的套接字发送消息。我遇到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;
}
Windows has a SendMessage
macro,根据是否启用unicode在SendMessage
和SendMessageA
功能之间透明切换。此宏替换使您的SendMessageW
函数踩踏了。
您可以添加
SendMessage
之后的任何地方>
#undef SendMessage
但是稍后可能会导致问题。我认为最好将
#include <WS2tcpip.h>
函数的名称更改为不会冲突的名称。