mediaios / net-diagnosis

ios平台网络诊断SDK,支持对ip和域名的ping,traceroute(udp,icmp协议),支持tcp ping, 端口扫描,nslookup,局域网活跃ip扫描等功能-----------Ios platform network diagnostic SDK, support ip and domain name ping, traceroute (udp, icmp protocol), support tcp ping, port scan, nslookup, LAN active ip scan and other functions
MIT License
555 stars 132 forks source link

多线程同时ping很多域名的时候有可能会crash #11

Open zhousj888 opened 4 years ago

zhousj888 commented 4 years ago

每次ping一个域名,phonePingServise会实例化一个PhonePing对象,然后PhonePing会执行gethostbyname这个阻塞的方法,当这时候又ping了一个域名,之前那个phonePing就被释放了,然后当他继续执行gethostbyname之后的逻辑的时候,会发现self已经被dealloc了,产生野指针错误

mediaios commented 4 years ago

是的,会有这种问题。

mediaios commented 4 years ago

是的,会有这种问题。

mediaios commented 4 years ago

是的,会有这种问题。

mediaios commented 4 years ago

是的,会有这种问题。

Wbqqqq commented 4 years ago

@zhousj888 看了眼代码,应该能实现多线程ping的吧?这不过作者用了单例,所以开了多线程也是没用的。PhonePing对象就一个。稍微改改就可以了

nukc commented 4 years ago

当手机连着热点,热点几乎没有网络,这个时候 ping 的话阻塞了 我在 SwiftUI View 的 onAppear 里执行了 ping,此时当上个界面 navigation 进来的时候,页面都阻塞了,请问是否有什么好的解决方法

nukc commented 4 years ago

现在暂时是这样死缓了。。能用

       DispatchQueue.init(label: "com.gethostname").async {
            if gethostbyname(hostname) != nil {
                DispatchQueue.main.async {
                    // do soming, eg: ping , start download ..
                }
            }
        }