Pour une raison quelconque, je voulais installer Swift sur Ubuntu et essayer le traitement parallèle, mais cela n'a pas fonctionné, donc je vais vous montrer le problème et la solution.
L'environnement que j'ai exécuté est le suivant.
--Je veux confirmer que le traitement est exécuté en parallèle pour le moment
Après enquête, il semble qu'il soit courant d'utiliser «Dispatchqueue». Il semble qu'il y ait aussi «Process» et «Thread», mais «Dispatchqueue» semble les rendre faciles à utiliser, alors j'ai décidé d'utiliser «Dispatchqueue» avec obéissance.
Dans un premier temps, copiez le code du Site sorti après la recherche tel quel, et procédez comme suit Était là.
J'ai lancé swift package init --type executable
pour générer divers fichiers et créé main.swift comme suit.
import Foundation
var value: Int = 2
DispatchQueue.main.async {
for i in 0...3 {
value = i
print("\(value) ✴️")
}
}
for i in 4...6 {
value = i
print("\(value) ✡️")
}
DispatchQueue.main.async {
value = 9
print(value)
}
Cependant, le résultat de l'exécution est
4 ✡️
5 ✡️
6 ✡️
0 ✴️
1 ✴️
2 ✴️
3 ✴️
9
Je voulais être
4 ✡️
5 ✡️
6 ✡️
Il est devenu.
En d'autres termes, le traitement de la partie laissée à ** Dispatchqueue
n'est pas du tout exécuté. ** **
J'avais une idée sur cette cause.
Il exécutait ** le fichier seul **.
De nombreux sites sont destinés à être utilisés dans les applications iPhone développées sur Mac.
De plus, je me suis souvenu que j'avais déjà eu un problème similaire lors de l'exécution de Swift en tant que fichier unique. Voici les questions que j'ai postées à ce moment-là.
[Swift] Timer ne peut pas être exécuté à plusieurs reprises (exécution régulière)
Ceci est un problème car RunLoop, qui est automatiquement exécuté dans l'application, n'est pas exécuté lorsque le fichier Swift est exécuté seul, et il est résolu en ajoutant RunLoop.current.run ()
à la fin du programme. Fait.
Comment ai-je ajouté RunLoop.current.run ()
à ce programme également?
import Foundation
var value: Int = 2
DispatchQueue.main.async {
for i in 0...3 {
value = i
print("\(value) ✴️")
}
}
for i in 4...6 {
value = i
print("\(value) ✡️")
}
DispatchQueue.main.async {
value = 9
print(value)
}
RunLoop.current.run()
Ensuite, la sortie était comme prévu.
Si vous avez des erreurs ou des améliorations, veuillez laisser un commentaire ou une demande de modification. Merci beaucoup.
Recommended Posts