Mon application est de communiquer entre environ 5 iPads et de mettre à jour en fonction des données reçues grâce à la structure de connectivité multipeer.Swift: Multipeer Connectivity + UI Mise à jour
Un des iPad fait ce qui suit: Il obtient son emplacement actuel et l'envoie à d'autres pairs. Les homologues mettent à jour l'interface utilisateur en fonction de l'emplacement reçu.
J'ai trouvé qu'il y avait un problème que lorsque l'iPad a besoin d'envoyer le paquet aux autres, l'interface n'a pas été mise à jour immédiatement. Les événements d'interface utilisateur sont restés bloqués jusqu'à ce qu'il ait fini d'envoyer le paquet. Depuis la mise à jour de l'emplacement, tous ces événements ont tiré en permanence.
j'ai essayé de placer le paquet d'envoi dans un fil:
let bgQueue = DispatchQueue(label: "hk.edu.polyu.isurf.sendqueue", qos: .utility, attributes: .concurrent)
Et puis mettre le code pour envoyer paquet dans ce bgQueue:
func sendPacket {
bgQueue.async {
// create packet, and send
}
}
Mon code d'emplacement de mise à jour provoquera ceci:
func receiveLocation() {
sendPacket()
updateUI()
}
Comment puis-je améliorer l'efficacité? L'interface utilisateur ne peut fondamentalement pas mettre à jour maintenant, il est de "retard" sérieux.
J'ai essayé de changer le type de bgQueue, mais pas d'amélioration.
Merci.