场合
直到昨天,我的线程代码工作正常。现在,我的线程参数被归零并在传递到线程时移动。
main.cpp
中的相关代码//First socket: UDP | Second Socket: TCP
std::pair<SOCKET, SOCKET> ServerSockets = Network::Operations::Server();
SOCKET UDPSocket = ServerSockets.first;
//Need to pass two arguments to the thread, when it only accepts one pointer. So create a struct and send the pointer.
ListenData UDPServ;
UDPServ.pNetwork = &Network;
UDPServ.LocalUDPSocket = UDPSocket;
//Set up the listener.
HANDLE UDPListener = Network::Operations::UDPListen(UDPServ);
在此阶段UDPSocket
是正确的值(例如103),pNetwork
也是正确的。
UDPListen()
中的相关代码 static HANDLE UDPListen(ListenData UDPListenData)
{
HANDLE NetworkThread;
NetworkThread = CreateThread(
NULL, //Default security
0, //Default thread stack size
Network::Operations::Listen, //Thread function name
&UDPListenData, //Thread arguments
0, //Default creation flags
NULL);
//CloseHandle(NetworkThread);
return NetworkThread;
}
在此状态下,值应该是正确的。
Listen()
中的相关代码 static DWORD WINAPI Listen(void *param)
{
ListenData *UDPServ = (ListenData*)param;
SOCKET Socket = UDPServ->LocalUDPSocket;
std::vector<Net> *Network = UDPServ->pNetwork;
现在,UDPSocket
为零,pNetwork
为103.这是一个谜。
我真正改变的唯一代码是初始化服务器的代码,我修改了该代码以包含TCP套接字的绑定。该函数用于返回单个SOCKET
但现在返回std::pair<SOCKET, SOCKET>
。
答案 0 :(得分:2)
将指针传递给堆栈中的本地数据 - DateSeparator
- 但是这个数据在DateTime dateDate = DateTime.ParseExact(date, "dd'/'MM'/'yyyy", null);
返回后才变为未定义。您可能需要像
&UDPListenData