Win32 CreateThread()参数Zero'ed?

时间:2017-03-10 11:47:20

标签: c++ multithreading sockets winapi

场合

直到昨天,我的线程代码工作正常。现在,我的线程参数被归零并在传递到线程时移动。

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>

1 个答案:

答案 0 :(得分:2)

将指针传递给堆栈中的本地数据 - DateSeparator - 但是这个数据在DateTime dateDate = DateTime.ParseExact(date, "dd'/'MM'/'yyyy", null); 返回后才变为未定义。您可能需要像

这样的代码
&UDPListenData