Re: [問題]關於Thread的基礎問題

看板MacDev作者 (等待.微笑)時間14年前 (2009/09/29 22:46), 編輯推噓2(2019)
留言21則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《zonble (zonble)》之銘言: : ※ 引述《angelyin (等待.微笑)》之銘言: : : detachNewThreadSelector:@selector(A:) toTarget:B withObject:C : : 想請問前輩A B C是代表什麼意思? : : 稍微研究了一下 : 假如原來的 code 是: : [myObj myMethodWithObject:myParameter]; : 要用 Thread 的話 : [NSThread detachNewThreadSelector:@selector(myMethodWithObject:) : toTarget:myObj : withObject:myParameter]; 謝謝這位前輩 我想在請問另外一個問題 performSelectorOnMainThread:@selector(D:) withObject:E waitUntilDone:F 1.請問上面這個method是指傳送message給main thread上的D嗎? 那 D是指要invoke的method E是指要傳給D的參數 F是boolen值 我看文件寫說 如果是YES就block目前的thread 如果是NO就立刻把這個method return 2.上述的理解有錯嗎?(雖然我講起來都覺得很抽象) 3.如果都沒錯 那為什麼要叫main thread執行D啊? 中途打斷一個thread的執行不是很怪嗎? 想要執行D為什麼不另外開一個thread? 謝謝^^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.210.155

09/29 23:44, , 1F
09/29 23:44, 1F

09/29 23:45, , 2F
http://tinyurl.com/yd4fw2t 這個是 NSObject
09/29 23:45, 2F

09/29 23:47, , 3F
不過你的理解沒錯
09/29 23:47, 3F

09/29 23:51, , 4F
我就是看了 http://tinyurl.com/yk8cb39 還是有點不懂^^"
09/29 23:51, 4F

09/29 23:53, , 5F
如果1和2的理解是對的~關於第3點又想不通...
09/29 23:53, 5F

09/29 23:53, , 6F
不知道有什麼情況是一定要呼叫main thread中途做別的事?
09/29 23:53, 6F

09/30 02:44, , 7F
像是 UI 就需要在 main thread 控制
09/30 02:44, 7F

09/30 02:55, , 8F
所以在更新UI,例如進度列的時候就會用到?
09/30 02:55, 8F

09/30 03:03, , 9F
比方說,你一邊用迴圈跑東西,一邊要有動畫效果的進度條
09/30 03:03, 9F

09/30 03:04, , 10F
這樣就需要兩個 thread,要不程式卡在迴圈裡頭
09/30 03:04, 10F

09/30 03:04, , 11F
像是什麼風火輪轉轉轉的效果就不會動
09/30 03:04, 11F

09/30 03:05, , 12F
但是當你的迴圈跑到了一定的狀況,要把結果丟回給 UI
09/30 03:05, 12F

09/30 03:06, , 13F
比方說要把轉轉轉停掉,而那個動畫是在 thread 裡頭
09/30 03:06, 13F

09/30 03:07, , 14F
就需要叫 main thread 把轉轉轉停掉。
09/30 03:07, 14F

09/30 03:08, , 15F
如果不想開 thread 還要有同樣的效果,就變成迴圈原本做
09/30 03:08, 15F

09/30 03:08, , 16F
的事情,改用 run loop 來推動
09/30 03:08, 16F

09/30 03:09, , 17F
每一輪 run loop 跑一點要做的事情
09/30 03:09, 17F

09/30 03:15, , 18F
另外想到,如果 thread 做的事情最後會呼叫timer
09/30 03:15, 18F

09/30 03:15, , 19F
也是丟回 main thread 做比較好。
09/30 03:15, 19F

09/30 03:16, , 20F
而在 10.5 之前,像是在 thread 裡頭呼叫 DO
09/30 03:16, 20F

09/30 03:16, , 21F
是會爆炸的…。
09/30 03:16, 21F
文章代碼(AID): #1AmXtSVr (MacDev)
文章代碼(AID): #1AmXtSVr (MacDev)