gpt4 book ai didi

c++ - 线程阻塞了整个程序

转载 作者:太空狗 更新时间:2023-10-29 23:52:55 28 4
gpt4 key购买 nike

我正在尝试制作一个多客户端服务器。我有这个线程:

void client_thread(int new_socket)
{
int size;
char inbuffer[BUF];

do
{
cout << "Waiting for messages: " << endl;
size = recv(new_socket, inbuffer, BUF, 0);
} while (true);
}

这个主要过程:

int main()
{
while (true)
{
//waiting for clients
cout << "Waiting for connections..." << endl;
new_socket = accept ( create_socket, (struct sockaddr *) &cliaddress, &addrlen );

//new client connected
if (new_socket > 0)
{
//start thread
thread(client_thread, new_socket).join();
}
}
return 0;
}

当第一个客户端连接时,线程启动,服务器等待他的消息。但服务器不再等待新客户。我不知道为什么。是因为线程函数内的无限 do-while 循环吗?如果线程包含无限循环会阻塞您的整个程序,那么线程有什么意义?

最佳答案

主例程阻塞,因为它等待线程完成:join()

如果你不想阻塞,那么就不要join()你的client_thread。

此异常可能来自您的匿名线程对象的销毁。当您离开 if() 的范围时,此范围内的所有对象都将被销毁。来自 http://en.cppreference.com/w/cpp/thread/thread/~thread你可以看到,析构函数调用 terminate()。为避免这种情况,您可以调用 detach()。因此,您必须使用 thread(client_thread, new_socket).detach(); 而不是 thread(client_thread, new_socket).join();

关于c++ - 线程阻塞了整个程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13260777/

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