POSIX 스레드를 생성 할 때 시스템이 nswillBecomemultithreadedNotification을 보낼 것인가?

StackOverflow https://stackoverflow.com/questions/1608230

  •  05-07-2019
  •  | 
  •  

문제

나는 그것을 시도했지만이 알림이 오지 않는다고 생각합니다. 그게 정상적인 경우입니까?

도움이 되었습니까?

해결책

아니요,이 알림은 다음과 같습니다 NSThread. 평범한 pthreads를 사용하는 경우 보내지 않습니다.

다른 팁

에서 문서:

Cocoa 프레임 워크는 잠금 장치 및 기타 형태의 내부 동기화를 사용하여 올바르게 행동 할 수 있도록 코코아 프레임 워크를 보호합니다. 그러나 이러한 잠금이 단일 스레드 케이스에서 성능을 저하시키는 것을 방지하기 위해 Cocoa는 응용 프로그램이 NSthread 클래스를 사용하여 첫 번째 새 스레드를 생성 할 때까지이를 생성하지 않습니다. POSIX 스레드 루틴 만 사용하는 스레드를 스폰하면 Cocoa는 알림을받지 못합니다. 이 경우 코코아 프레임 워크와 관련된 작업이 애플리케이션을 불안정하게하거나 충돌시킬 수 있습니다.

Cocoa에게 여러 스레드를 사용하려고한다는 것을 알리려면 NSThread 클래스를 사용하여 단일 스레드를 스폰하고 해당 스레드가 즉시 종료되기 만하면됩니다. 스레드 진입 점은 아무것도 할 필요가 없습니다. NSTHREAD를 사용하여 스레드를 산란하는 행위만으로도 코코아 프레임 워크에 필요한 잠금 장치가 제자리에 놓여 지도록 충분합니다.

Cocoa가 응용 프로그램이 멀티 스레드라고 생각하는지 확실하지 않은 경우, nsthread의 ismultithreaded 메소드를 사용하여 확인할 수 있습니다.

또한 '시간이 바뀌 었습니다'라는 점에 주목해야합니다. NSWillBecomeMultiThreadedNotification 추가되었습니다 Foundation. 멀티 스레드 프로그래밍은 이제 훨씬 더 일반적입니다. 이제는이 알림이 앱에 게시 된 것을 결코 볼 수 없을 가능성의 영역 내에 있습니다. 현대적인 앱은 코드의 일부가 실행되기 전에 생애 초기에 멀티 스레드가됩니다. 또한 문서에서 :

코코아 라이브러리를 개발하는 경우 관찰자로 등록 할 수 있습니다. NSWillBecomeMultiThreadedNotification응용 프로그램이 멀티 스레드가 될 때 알림을 받으려면. 그러나 라이브러리 코드가 호출되기 전에 발송 될 수 있으므로이 알림을받는 데 의존해서는 안됩니다.

나는 사용할 것이다 [NSThread isMultiThreaded] 의존하는 대신 NSWillBecomeMultiThreadedNotification.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top