iOS多線程--線程喚醒

前一篇文章《iOS開機廣告實現(xiàn)》里面第二種獲取廣告數(shù)據(jù)的方法有一個困難需要克服就缆,就是如果在主線程睡眠時間內(nèi),子線程已經(jīng)下載好廣告數(shù)據(jù)竭宰,這時要主動喚醒主線程份招,也就是線程喚醒的問題。
對于線程問題脾还,網(wǎng)上大部分都是開辟子線程及線程睡眠的文章,卻幾乎沒有如何手動喚醒線程的文章。最終嗤谚,在一篇博客里面看到了一種解決方案,那就是NSCondition巩步。

NSCondition

NSCondition的方法很少,只有如下的幾個:

@available(iOS 2.0, *)
public class NSCondition : NSObject, NSLocking {
    
    public func wait()
    public func waitUntilDate(limit: NSDate) -> Bool
    public func signal()
    public func broadcast()
    
    @available(iOS 2.0, *)
    public var name: String?
}

通過wait()waitUntilDate(limit: NSDate) -> Bool這兩個方法都可以實現(xiàn)線程阻塞即線程睡眠椅野,不同之處在于wait()會使線程一直處于休眠狀態(tài),直到收到signal()為止离福;而waitUntilDate(limit: NSDate) -> Bool在使線程睡眠的同時會設(shè)置睡眠的終止時間,如果在終止時間前收到了signal()就會喚醒線程妖爷;當(dāng)?shù)竭_(dá)終止時間的時候,即使沒有收到signal()絮识,也會直接喚醒線程,而不會像wait()方法那樣一直睡眠下去次舌。相關(guān)代碼如下所示:

    /// 阻塞線程獲取廣告信息
    private var condition = NSCondition()
    /// 獲取廣告信息總時間(程序阻塞最長時間)
    private var totalTimeForGettingAd: Double = 6

    //MARK: - 阻塞及喚醒
    //阻塞當(dāng)前線程
    func blockedCurrentThread() {
        //阻塞線程兽愤,如果規(guī)定時間內(nèi)還未完成獲取彼念,則繼續(xù)
        let finalDate = NSDate(timeIntervalSinceNow: totalTimeForGettingAd)
        condition.lock()
        condition.waitUntilDate(finalDate)
        condition.unlock()
    }
    //喚醒阻塞的線程烹看,與blockedCurrentThread配套使用
    func invokeThread() {
        condition.lock()
        condition.signal()
        condition.unlock()
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酱吝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌务热,老刑警劉巖忆嗜,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崎岂,死亡現(xiàn)場離奇詭異,居然都是意外死亡冲甘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門濒憋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凛驮,你說我怎么就攤上這事∏玻” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵本姥,是天一觀的道長厂僧。 經(jīng)常有香客問我扣草,道長颜屠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上闷串,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著耘擂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篙悯,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天铃绒,我揣著相機與錄音鸽照,去河邊找鬼颠悬。 笑死矮燎,一個胖子當(dāng)著我的面吹牛赔癌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播届榄,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼倔喂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了席噩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤悼枢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馒索,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡旨怠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年蜈块,在試婚紗的時候發(fā)現(xiàn)自己被綠了鉴腻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片百揭。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖器一,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盹舞,我是刑警寧澤产镐,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站丑掺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏街州。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一唆缴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧面徽,春花似錦、人聲如沸趟紊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铛嘱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間袭厂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工肛真, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚓让。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓讥珍,卻偏偏與公主長得像历极,于是被迫代替她去往敵國和親衷佃。 傳聞我的和親對象是個殘疾皇子趟卸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容