是否有其他快速有效地运行这样的方法?CPP

Is there any more fastefficient way to run 255 threads like this? CPP

本文关键字:方法 CPP 运行 其他 有效地 是否      更新时间:2023-10-16

i运行了试图连接到某些服务器的255个线程。但是它花了很多timr(10秒),直到完成所有线程为止。如果某个线程成功连接,则我由Ref发送的插座将填充该服务器的ID。

void TryConnect(int octet, SOCKET& soc_returned)
{
    Client temp_client;
    int first_of_last_octet = getway.find_last_of('.') + 1;
    getway = getway.replace(first_of_last_octet, 3, std::to_string(octet));
    try
    {
        temp_client.GetInfo(getway.c_str(), S_PORT);
        temp_client.CreateSocket();
        temp_client.Connect();
        soc_returned = temp_client.socket_id;
    }
    catch (...)
    {
        std::cout << octet << std::endl;
    }
}
void TryConnectOnSubnet(std::string getway)
{
    std::vector<std::thread*> threads;
    SOCKET soc_returned;
    for (int i = 1; i < 254; i++)
    {
        std::thread* t = new std::thread(&Client::TryConnect, this, i, std::ref(soc_returned));
        threads.push_back(t);
    }
    for (int i = 0; i < 253; i++)
    {
        threads[i]->join();
    }
    std::cin.get();
} 

我不明白为什么要做这件事太久了。有人有什么想法吗?顺便说一句,我注意到我没有在此线程上激活delete

线程通常很昂贵。一个人最多可以占用8MB的RAM。他们的开销很大。网络编程最受欢迎的方法是使用极少数线程的某种异步反复传动。

看看http://www.boost.org/doc/libs/1_62_0/doc/html/boost_asio.html并获得一些见解。我建议您研究它,因为ISO Commitee已经在进行技术规范,标准网络库将基于ASIO。

如果您想并行运行许多I/O绑定的东西,这是一个基于回调的链条,Coroutines或Futures Continutustanus,一个或几个线程。

这不是一个容易的话题,但会为您提供很多有关做到这一点的见解。我建议您看看这些示例。了解库需要一些时间。