我跑了255線程,試圖連接到某個服務器。 但它花了很多時間(10秒),直到所有的線程完成。 如果某個線程成功連接,則由ref發送的SOCKET將填充該服務器的ID。有沒有更快的有效的方式來運行這樣的255個線程? CPP
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
在這個線程。
你已經試過特別的東西需要很長時間嗎?我的意思是你做了一些時間測量? – retinotop
是的。 「連接」功能。這是C線程的正常連接。我只是扭曲了它。 –
運行需要多長時間1連接1個螺紋? 2線程連接怎麼樣? – Alek86