gpt4 book ai didi

c++ - _beginthreadx 和套接字

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:31 25 4
gpt4 key购买 nike

我对_beginthreadx函数的第三个和第四个参数有疑问:

如果我有这条线来创建线程

hThread=(HANDLE)_beginthreadex(0,0, &RunThread, &m_socket,CREATE_SUSPENDED,&threadID );

m_socket 是我想要在线程内部的套接字(第四个参数)

我以这种方式获得了 RunThread 函数(第三个参数)

static unsigned __stdcall RunThread (void* ptr) {
return 0;
}

m_socket有没有就独立创建线程就够了?

提前致谢

感谢 Ciaran Keating 的回复帮助我更好地理解了线程

我再解释一下情况

我在类中的这个函数中创建了踏板

公共(public):void getClientsConnection() { 客户数 = 1; SOCKET temporalSocket = NULL; firstClient = NULL; secondClient = NULL;

    while (numberOfClients < 2)
{
temporalSocket = SOCKET_ERROR;
while (temporalSocket == SOCKET_ERROR)
{
temporalSocket = accept(m_socket, NULL, NULL);
//-----------------------------------------------
HANDLE hThread;
unsigned threadID;

hThread=(HANDLE)_beginthreadex(0,0, &RunThread, &m_socket,CREATE_SUSPENDED,&threadID );
WaitForSingleObject( hThread, INFINITE );
if(!hThread)
printf("ERROR AL CREAR EL HILO: %ld\n", WSAGetLastError());
//-----------------------------------------------

}
if(firstClient == NULL)
{
firstClient = temporalSocket;
muebleC1 = temporalSocket;
actionC1 = temporalSocket;
++numberOfClients;
printf("CLIENTE 1 CONECTADO\n");
}
else
{
secondClient = temporalSocket;
muebleC2 = temporalSocket;
actionC2 = temporalSocket;
++numberOfClients;
printf("CLIENTE 2 CONECTADO\n");
}
}
}

我想做的是在等待客户端连接时让套接字位于线程内

我有线程的代码,这可行吗?

我可以改变线程的状态这不是问题

再次感谢

最佳答案

是的,这将创建线程并将它传递给您的套接字句柄。但是通过立即从 RunThread 返回,您的新线程将在您恢复它后立即终止(您已经创建它暂停。)您需要将套接字处理代码(读/写循环等)放在 RunThread 中。

更多提示:

您必须确保 m_socket 在线程的生命周期内保持有效,因为您通过引用传递了它。您可能更愿意按值传递它,并将所有权传递给新线程,但当然在那种情况下它可能不属于您的对象实例(我从 m_ 前缀推断。)或者您可能更愿意离开对象实例中的套接字句柄,并将对该对象的引用传递给 beginthread:

beginthread(...,&RunThread,this,...);

关于c++ - _beginthreadx 和套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5175736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com