dispatch_source ã® DISPATCH_SOURCE_TYPE_TIMER ã§ timeout å¦çãå®è£ ãã
å æ¥ãxç§ãã£ããããå¦çããã£ã³ã»ã«ããã¨ããããããã¿ã¤ã ã¢ã¦ãå¦çãå®è£ ããå¿ è¦ããã£ãã¨ãã« dispatch_source ã使ã£ã¦ããã£ãã®ã§åå¿é²ã
彿ã°ã°ã£ã¦ãç¹°ãè¿ãä¸å®ééã§å¦çãåãããµã³ãã«ã¯ããè¦ã¤ãã£ãã®ã§ããããã¼ã¹ãã£ã¦ãæå¾ ããåããªããªãã£ããçµå±ã¯ãã¨ãã¹ãã¼ã Objective-C ããã°ã©ãã³ã°ãã«ãµã³ãã«ãã®ã£ã¦ã¦å©ããã¾ããã¨ãã話ã
Xcode ã®ã¹ããããå½¢å¼ã ã¨ãããªæã
/// dispatch_source ãçæãtimer ãåã queue ãæå®ã dispatch_source_t timerSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, <#dispatch_queue#>); /// timeout ã®æéã "seconds" ãã¬ã¼ã¹ãã«ãã¼ã« "15" ã®ããã«å ¥åã"leeway_seconds" ã«ã¯ãºã¬ã®è¨±å®¹ç¯å²ãå ¥å dispatch_source_set_timer(timerSource, dispatch_time(DISPATCH_TIME_NOW, <#seconds#>ull * NSEC_PER_SEC), DISPATCH_TIME_FOREVER, <#leeway seconds#>ull * NSEC_PER_SEC); /// timer çºç«æã®æåãå®è£ dispatch_source_set_event_handler(timerSource, ^{ <#code#> /// å¾å§æ« dispatch_source_cancel(timerSource); /* ããã㯠#if !OS_OBJECT_USE_OBJC dispatch_release(timerSource); #endif */ }); /// timer ãã£ã³ã»ã«æã®æåãå®è£ dispatch_source_set_cancel_handler(timerSource, ^{ <#something_clean_up#> #if !OS_OBJECT_USE_OBJC dispatch_release(timerSource); #endif }); /// timer ã®åä½éå§ dispatch_resume(timerSource);
ç´ ç´ã« NSTimer ã使ãã°ãããããï¼ã¨ããã®ããã£ããã ãã©ããã®å¦çå ¨ä½ãããã¯ã°ã©ã³ããã£ã¹ããããã¥ã¼ä¸ã§å®è¡ããã¦ãã®ã§ Runloop ãèªåã§åãã®ã¯å«ã ã£ãããã¡ã¤ã³ã¹ã¬ããã«ã¿ã¤ãã¼ãã»ããããã¨ã¹ã¬ãããã¾ããäºã«ãªãã®ã§ã·ãã¢ãªã¿ã¤ãã³ã°ï¼å®è¡é åºï¼ãæ±ãããã¦ãã®ã§ dispatch_source ã使ãããã£ãã¨ããããã§ãã
ãã³ãã«ãã¨ãã¹ãã¼ã Objective-C ããã°ã©ãã³ã°ãã¯ãã°ãããã