dispatch_time_t

寫在最前面:
轉自:https://blog.csdn.net/wpeng20125/article/details/73650569
對原文作了下排版利于理解,也感謝原文作者為我們說明這個函數

dispatch_time_t 類型,它的創建有兩個函數

    1. dispatch_time(<#dispatch_time_t when#>, <#int64_t delta#>)
      第一個參數是從什么時間開始,一般直接傳
      DISPATCH_TIME_NOW 表示從現在開始
      第二個參數表示具體的時間長度(不能直接傳 int 或 float), 可以寫成這種形式 (int64_t)3* NSEC_PER_SEC
        #define NSEC_PER_MSEC 1000000ull    每毫秒有1000000納秒
        #define USEC_PER_SEC 1000000ull     每秒有1000000微秒
        #define NSEC_PER_USEC 1000ull       每微秒有1000納秒

注意 delta 的單位是納秒!
1秒的寫作方式可以是 1* NSEC_PER_SEC; 1000* NSEC_PER_MSECUSEC_PER_SEC* NSEC_PER_USEC

  • 2.dispatch_walltime(<#const struct timespec * _Nullable when#>, <#int64_t delta#>),
    第一個參數是一個結構體, 創建的是一個絕對的時間點,比如 2016年10月10日8點30分30秒, 如果你不需要自某一個特定的時刻開始,可以傳 NUll,表示自動獲取當前時區的當前時間作為開始時刻, 第二參數意義同第一個函數
    dispatch_time_t time = dispatch_walltime(NULL, 5* NSEC_PER_SEC);

兩個函數的不同
例如:
從現在開始,1小時之后是觸發某個事件

使用第一個函數創建的是一個相對的時間,第一個參數開始時間參考的是當前系統的時鐘,當 device 進入休眠之后,系統的時鐘也會進入休眠狀態, 第一個函數同樣被掛起; 假如 device 在第一個函數開始執行后10分鐘進入了休眠狀態,那么這個函數同時也會停止執行,當你再次喚醒 device 之后,該函數同時被喚醒,但是事件的觸發就變成了從喚醒 device 的時刻開始,1小時之后.

而第二個函數則不同,他創建的是一個絕對的時間點,一旦創建就表示從這個時間點開始,1小時之后觸發事件,假如 device 休眠了10分鐘,當再次喚醒 device 的時候,計算時間間隔的時間起點還是,開始時就設置的那個時間點, 而不會受到 device 是否進入休眠影響

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一:base.h 二:block.h 1. dispatch_block_flags:DISPATCH_BLOCK...
    小暖風閱讀 2,478評論 0 0
  • iOS多線程編程 基本知識 1. 進程(process) 進程是指在系統中正在運行的一個應用程序,就是一段程序的執...
    陵無山閱讀 6,099評論 1 14
  • dispatch_semaphore是GCD用來同步的一種方式,dispatch_semaphore 信號量基于計...
    e5a8d3183387閱讀 335評論 0 1
  • 前言原網頁地址:http://www.cocoachina.com/ios/20150505/11751.html...
    LZM輪回閱讀 499評論 0 0
  • 2018年6月4日星期一晴親子日記(190)今天我沒有參加孩子們的升旗儀式。我和老公上午去姑家看看姑。下午去老公把...
    艾華艾悅媽媽閱讀 188評論 0 0