문제

랩톱을 닫거나 Apple 메뉴에서 "잠자기"를 선택하여 Mac OS X이 잠자기 상태가 되면 어떻게 실행 프로세스를 일시 중단합니까?

윈도우가 아닌 프로세스는 임의의 실행 지점에서 단순히 일시 중단된다고 가정합니다.Cocoa 앱에서도 마찬가지입니까, 아니면 OS가 제어가 런 루프 디스패처로 반환될 때까지 기다렸다가 "알려진" 위치에서 절전 모드로 전환됩니까?최신 OS에서 그렇게 할 수 있나요? 아니면 일반적으로 앱이 무엇을 하든 단순히 앱을 정지해도 안전할까요?

궁금합니다. 언제든지 절전 모드가 발생하도록 허용하면 앱의 관점에서 볼 때 시스템 시계가 갑자기 상당한 양만큼 앞당겨질 수 있기 때문입니다.코딩하는 동안 일반적으로 고려하지 않는 가능성입니다.

도움이 되었습니까?

해결책

CPU가 실제로 현재 앱 코드를 실행하고 있는 경우 앱은 바로 그 순간에 중단됩니다.귀하의 앱은 지속적으로 실행 시간 작업 스케줄러는 어떤 앱이 CPU 시간을 확보하는지, 어떤 코어에서, 얼마나 오랫동안 사용하는지 결정합니다.일단 시스템 정말 절전 모드로 전환되면 스케줄러는 더 이상 앱에 시간을 주지 않으므로 그 순간 어디에서나 실행이 중지됩니다. 이는 거의 모든 곳에서 발생할 수 있습니다.그러나 커널은 깨끗한 상태여야 합니다.즉, 방금 커널을 호출했는데(많은 libC 함수가 수행함) 이 호출이 일부 안전한 지점에 있지 않은 경우(예:잠자기, 조건이 true가 될 때까지 기다리는 것 등) 또는 중요한 커널 잠금을 보유하는 것이 가능합니다(예:퍼널), 커널은 이 호출이 사용자 공간으로 다시 돌아오거나 작업 스케줄러에서 앱을 최종적으로 취소하기 전에 실행이 안전 지점에 도달할 때까지 절전 모드를 일시 중단할 수 있습니다.

커널 포트를 열고 절전/깨우기 이벤트를 등록할 수 있습니다.이 경우 시스템이 절전 모드로 전환하려고 할 때 앱은 이벤트를 수신하게 됩니다.여러 가지 가능성이 있습니다.하나는 이에 응답하여 시스템이 발전할 수 있다는 것입니다.또 다른 하나는 수면을 중단하는 것입니다.그러나 Apple에서는 특정 이벤트가 최대 30초 동안 일시 중지될 수 있으며 그 이후에는 앱이 마음에 들든 싫든 시스템이 계속 작동할 것이라고 말합니다.마지막으로 취소할 수 있습니다.하지만 모든 이벤트를 취소할 수는 없습니다.시스템이 이미 절전 모드로 전환하기로 결정한 경우 최대 30초까지만 일시 중지하거나 한 번에 허용할 수 있으며 취소할 수 없습니다.그러나 이벤트를 들을 수도 있습니다. 시스템이 앱에게 지금 잠을 자도 괜찮은지 묻고 거기에서 "아니요"라고 답하면 잠이 취소될 수 있습니다.

"자도 괜찮아?"와 "자러 갈 계획이야"의 차이점은 다음과 같습니다.첫 번째 메시지는 절전 설정이 적용된 경우, 즉 사용자가 구성된 시간 동안 마우스를 움직이지 않거나 아무 것도 입력하지 않은 경우 전송됩니다.이 경우 시스템은 수면이 괜찮은지 묻습니다.Apple의 DVD 플레이어와 같은 앱은 "아니오"라고 말할 것입니다. 사용자가 DVD를 시청하고 컴퓨터와 상호 작용하지 않을 가능성이 높기 때문에 여전히 잠을 잘 이유가 없기 때문입니다.OTOH, 사용자가 Mac Book을 닫으면 앱이 요청되지 않고 시스템은 확실히 절전 모드로 전환되며 이제 최대 30초 동안 반응할 수 있는 앱에 알립니다.

모닝콜 이벤트도 매우 흥미로울 수 있습니다.예:시스템이 깨어나면 열려 있는 파일에 액세스할 수 없거나(외부 드라이브가 분리됨) 네트워크 소켓이 더 이상 작동하지 않습니다(네트워크가 변경됨).따라서 특정 앱 부분을 사용하기 전에 다시 초기화할 수 있으며 어느 정도 예상되는 오류가 발생할 수 있습니다.

이러한 이벤트 포착에 관한 Apple 페이지입니다.

다른 팁

앱에 따라 다릅니다.
외부 시스템과 상호 작용하는 경우(네트워킹 또는 USB/FireWire 등을 통한 작업 등) 영향을 받을 수 있습니다.OSX에서 실행되는 애플리케이션은 제한된 시간(최대 10ms) 동안 실행되며, 그 후 CPU에서 실행되도록 프로세스 대기열의 새 프로세스를 예약하는 커널에 의해 중단됩니다.이는 애플리케이션이 항상 CPU에서 실행된다고 "생각"하는 애플리케이션에 대해 투명합니다.따라서 수면으로의 전환은 시간이 빨리 흐르는 것 외에는 다르지 않습니다.
절전 모드로 전환되었음을 알아야 하는 경우 상태 변경에 대한 알림을 받는 방법을 자세히 설명하는 이 기술 노트를 참조하세요. 잠자기 및 깨우기 알림 등록 및 등록 취소

나는 그것이 어디에 있든 모든 앱을 일시 중단할 것이라고 믿습니다.

어쨌든 이런 일은 항상 발생한다는 것을 기억하십시오.컨텍스트 전환으로 인해 애플리케이션이 지속적으로 일시 중지되고 재개됩니다.따라서 실제로 시계는 앱의 두 명령 사이를 이동할 수 있지만 일반적으로 눈에 띄거나 중요한 방식은 아닙니다.

OS가 앱이 일부 메인 루프로 돌아갈 때까지 기다린 경우 애플리케이션이 절전 모드를 중단시키는 상황이 발생할 수 있습니다.많은 작업을 수행하고 있고 런 루프 디스패처로 돌아가지 않으면 머신이 절전 모드로 전환되는 것을 방지할 수 있습니다.별로 좋지 않을 것입니다.:)

그리고 시간을 설정하면 실행 중인 프로그램으로 도약하는 것처럼 보이기도 합니다.특별한 것도 없습니다.

이 위키피디아를 확인해보세요 기사.Cavver는 네트워크 연결과 같은 작업이 시간 초과되어 해당 서비스가 중단될 수 있다고 언급한 것이 맞습니다.

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