是否有其他快速有效地运行这样的方法?CPP
Is there any more fastefficient way to run 255 threads like this? CPP
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,一个或几个线程。
这不是一个容易的话题,但会为您提供很多有关做到这一点的见解。我建议您看看这些示例。了解库需要一些时间。
相关文章:
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 将一系列数字映射到 CPP 中的值的简单方法
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 在目录中查找所有.cpp.h文件(include,src等)的传统方法
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- 在 *.cpp 文件中实现的 c++ 函数/方法永远不会内联扩展吗?
- 使用模板方法为标头提供空 cpp 时出现问题
- CPP 继承虚拟方法解析顺序
- 在.cpp文件中定义方法而不是在 C++ 的 .h 文件中定义方法时,如何提高代码的性能?
- c++ - 将大文件记录处理到 cpp 容器的最有效方法
- cpp中rand()方法的bankend程序是什么?
- CPP:如何使用需要指针的方法创建线程
- main.cpp从 .h 文件调用公共虚拟方法
- 我想从安卓工作室访问 .so lib 及其 cpp 文件的方法
- Qt cpp - 将QString写入文本文件的干净方法
- cpp 中是否存在一种数据结构,可以轻松地提供一种基于已存在的实例构建新结构的方法
- 在 cpp 正文中声明方法时未定义的符号
- 对于我的 ComplexNumber 中的某些方法,我得到了一个奇怪的未定义错误引用.cpp,不过我对模板很陌生
- CPP主方法const声明
- 是否有其他快速有效地运行这样的方法?CPP