Aus irgendeinem Grund wollte ich Swift unter Ubuntu installieren und die parallele Verarbeitung versuchen, aber es hat nicht funktioniert, deshalb zeige ich Ihnen das Problem und die Lösung.
Die Umgebung, die ich ausgeführt habe, ist wie folgt.
Nach der Untersuchung scheint es üblich zu sein, "Dispatchqueue" zu verwenden. Es scheint, dass es auch "Process" und "Thread" gibt, aber "Dispatchqueue" scheint die Verwendung zu vereinfachen, deshalb habe ich mich entschlossen, "Dispatchqueue" gehorsam zu verwenden.
Kopieren Sie zunächst den Code von Site, die nach der Suche veröffentlicht wurde wie folgt und gehen Sie wie folgt vor War dort.
Ich habe "swift package init --type executeable" ausgeführt, um verschiedene Dateien zu generieren, und habe main.swift wie folgt erstellt.
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)
}
Das Ausführungsergebnis ist jedoch
4 ✡️
5 ✡️
6 ✡️
0 ✴️
1 ✴️
2 ✴️
3 ✴️
9
Ich wollte sein
4 ✡️
5 ✡️
6 ✡️
Es ist geworden.
Mit anderen Worten, die Verarbeitung des Teils, das ** Dispatchqueue
überlassen bleibt, wird überhaupt nicht ausgeführt. ** ** **
Ich hatte eine Idee zu dieser Sache. Es wurde ** die Datei alleine ausgeführt **. Viele Websites sind für die Verwendung in iPhone-Apps vorgesehen, die auf einem Mac entwickelt wurden. Außerdem erinnerte ich mich, dass ich zuvor ein ähnliches Problem hatte, als ich Swift als einzelne Datei ausführte. Unten sind die Fragen aufgeführt, die ich damals gestellt habe. [Swift] Timer kann nicht wiederholt ausgeführt werden (reguläre Ausführung) Dies ist ein Problem, da RunLoop, das automatisch in der App ausgeführt wird, nicht ausgeführt wird, wenn die Swift-Datei alleine ausgeführt wird, und es wird durch Hinzufügen von "RunLoop.current.run ()" am Ende des Programms behoben. Hat. Wie habe ich diesem Programm auch "RunLoop.current.run ()" hinzugefügt?
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()
Dann war die Ausgabe wie erwartet.
Wenn Sie Fehler oder Verbesserungen haben, hinterlassen Sie bitte einen Kommentar oder eine Bearbeitungsanfrage. Vielen Dank.
Recommended Posts