【发布时间】:2016-03-23 16:25:45
【问题描述】:
我正在尝试使用多线程来连接一个以上的对等 simultinaly。 当我运行我的代码并运行多于一个线程时,程序在“connect”函数中崩溃并写道:“Abort() 已被调用”。
这是我调用线程的方式:
TcpPeers(OrderedMap<std::string, unsigned short> peers, std::string infoHash)
{
this->peers = peers;
peersArr = new Peer[peers.GetSize()];
for (int i = 0; i < peers.GetSize(); i++)
{
Peer * pp = new Peer(peers.GetKeyByIndex(i), peers.GetValueByIndex(i), infoHash);
*(peersArr + i) = *pp;
}
for (int i = 0; i < peers.GetSize(); i++)
{
std::thread t1(&Peer::CreateConnection, *(peersArr + i));
}
}
对等点是我在尝试实现 bittorent 协议时需要连接的另一个客户端。
同样,当有一个线程时一切正常,当我有两个以上的对等方时,都会崩溃。
【问题讨论】:
-
什么是
peers,什么是peersArr。你确定peers.GetSize()不大于peersArr的大小吗?请发帖MVCE -
我编辑了我的问题 :)
标签: c++ multithreading sockets thread-safety bittorrent