2013-07-08 29 views
2

這是我在調試我的應用程序時觀察到的。我的應用程序基本上是單線程應用程序。調用時的額外線程[NSScreen mainScreen]

應用程序最初只有一個線程。

線程1:隊列:com.apple.main-thread。

在我的應用程序,在下面的代碼被擊中

NSScreen * mainscreen = [NSScreen mainScreen]; 

然後創建線程之後。

  1. 線程3:隊列:com.apple.libdispatch-經理
  2. 螺紋5
  3. 螺紋6
  4. 線程3的螺紋7

調用堆棧是 kevent64 _dispatch_mgr_thread

線程5,6和7的調用棧是 __wor kq_kernreturn start_wqthread

爲什麼線程3,5,6和7突然出現在[NSScreen mainScreen]上?

加載應用程序後,當我打開它時,它顯示一個線程16 CVDisplayLink。什麼是CVDisplayLink?

我使用Mac OS X Mavericks Preview和Xcode 5進行調試。

回答

2

Mac Developer Library描述:

芯視頻顯示的鏈接提供了一個獨立的高優先級的線程 通知應用程序時一個給定的顯示器將需要每個幀。您可以使用顯示鏈接輕鬆地與顯示器的刷新率同步 。顯示鏈接API在內部使用Core Foundation分類系統 來提供引用計數行爲和其他有用的屬性。

+0

感謝您的回答。什麼是com.apple.libdispatch-manager?調用堆棧中顯示的線程名稱之後的Queue的含義是什麼? – doptimusprime

+0

另外,我沒有使用CVDisplayLink。爲什麼在那裏? – doptimusprime

+0

@dbasic對不起,我不知道每一個系統線程都是誠實的;我知道他們提供通知等基礎設施。我甚至不確定他們是否有適當的文件記錄,但是'CVDisplayLink'至少在文檔中提到過。它們通常會存在於應用程序中,無論它們是否被使用。 – trojanfoe