개발도구 : xcode 9.4
언어 및 버전 : swift 4.1
쓰레드 선언은 다음과 같다.
let thread_one = Thread(target: self, selector: #selector(ViewController.runLoop_one), object: nil)
thread_one.start()
let thread_two = Thread(target: self, selector: #selector(ViewController.runLoop_two), object: nil)
thread_two.start()
let thread_three = Thread(target: self, selector: #selector(ViewController.runLoop_three), object: nil)
thread_three.start()
등록한 쓰레드 셀렉터(단순 숫자 카운트)
@objc func runLoop_one() {
let nCountLimit = 100
var nLoop = 0
while(nLoop < nCountLimit){
print("[thread one] : " + String(nLoop))
nLoop = nLoop + 1
Thread.sleep(forTimeInterval: 1)
}
}
@objc func runLoop_two() {
let nCountLimit = 100
var nLoop = 0
while(nLoop < nCountLimit){
print("[thread two] : " + String(nLoop))
nLoop = nLoop + 1
Thread.sleep(forTimeInterval: 1)
}
}
@objc func runLoop_three() {
let nCountLimit = 100
var nLoop = 0
while(nLoop < nCountLimit){
print("[thread three] : " + String(nLoop))
nLoop = nLoop + 1
Thread.sleep(forTimeInterval: 1)
}
}
let operationQueue: OperationQueue = OperationQueue()
operationQueue.addOperation {
let nCountLimit = 100
var nLoop = 0
while(nLoop < nCountLimit){
print("[operationQueue one] : " + String(nLoop))
nLoop = nLoop + 1
Thread.sleep(forTimeInterval: 0.2)
}
}
operationQueue.addOperation {
let nCountLimit = 100
var nLoop = 0
while(nLoop < nCountLimit){
print("[operationQueue two] : " + String(nLoop))
nLoop = nLoop + 1
Thread.sleep(forTimeInterval: 0.2)
}
}
operationQueue.addOperation {
let nCountLimit = 100
var nLoop = 0
while(nLoop < nCountLimit){
print("[operationQueue three] : " + String(nLoop))
nLoop = nLoop + 1
Thread.sleep(forTimeInterval: 0.2)
}
}
라벨과 같은 UI 객체를 컨드롤 할 수 있습니다.
DispatchQueue.main.async {
for i in 1...100 {
self.m_strNum_1.text = String(i)
}
}
DispatchQueue.global().async {
for i in 1...100 {
print("[DispatchQueue global] = \(i)")
}
}
DispatchQueue(label: "my define queue").async {
for i in 1...100 {
print("[my define queue] = \(i)")
}
}
let globalQueue = DispatchQueue.global()
globalQueue.async {
for i in 1...100 {
print("[DispatchQueue global async one] = \(i)")
}
}
globalQueue.async {
for i in 1...100 {
print("[DispatchQueue global async two] = \(i)")
}
}
globalQueue.async {
for i in 1...100 {
print("[DispatchQueue global async three] = \(i)")
}
}
globalQueue.sync {
for i in 1...100 {
print("[DispatchQueue global sync one] = \(i)")
}
}
globalQueue.sync {
for i in 1...100 {
print("[DispatchQueue global sync two] = \(i)")
}
}
globalQueue.sync {
for i in 1...100 {
print("[DispatchQueue global sync three] = \(i)")
}
}
let group = DispatchGroup()
group.enter()
DispatchQueue.global().async {
for i in 1...100 {
print("[DispatchQueue global async one] = \(i)")
}
group.leave()
}
group.enter()
DispatchQueue.global().async {
for i in 1...100 {
print("[DispatchQueue global async two] = \(i)")
}
group.leave()
}
group.wait(timeout: .distantFuture)
print("two thread end")
let group = DispatchGroup()
let queue = DispatchQueue.global()
queue.async(group: group) {
for i in 1...100 {
print("[DispatchQueue global async one] = \(i)")
}
}
queue.async(group: group) {
for i in 1...100 {
print("[DispatchQueue global async two] = \(i)")
}
}
group.notify(queue: DispatchQueue.global()) {
print("two thread end")
}