Что происходит с моим приложением, когда мой Mac засыпает?

У меня была точно такая же проблема, я обнаружил, что она была вызвана попыткой сгенерировать игру с тем же именем, что и та, в которой уже есть плагин. Если это также относится к вам, перейдите в C:\Users\___\Anaconda3\envs\serpent\plugins и удалите плагин, который уже существует. После этого снова пройдитесь по всем этапам руководства, позаботьтесь о том, чтобы перейти в C:\Users\___\Anaconda3\envs\serpent\ перед запуском conda activate serpent.

15
задан benzado 22 September 2008 в 19:24
поделиться

5 ответов

Ваше приложение прервано точно, где это в тот момент, если ЦП на самом деле в настоящее время выполняет код Вашего приложения. Ваше приложение постоянно добирается время выполнения планировщиком задач, который решает, какое приложение получает процессорное время, на который ядро, и как долго. Как только система действительно засыпает, планировщик просто не дает времени Вашему приложению больше, таким образом это остановит выполнение везде, где это в тот момент, который может произойти в значительной степени везде. Однако ядро должно быть в чистом состоянии. Это означает, позвонили ли Вы просто в ядро (много функций libC делают), и этот вызов не в некоторой безопасной точке (например, сон, ожидание условия стать верным, и т.д.) или возможные содержащие критические блокировки ядра (например, трубы), ядро может приостановить сон, пока это не отзывает возвраты к пространству пользователя, или выполнение достигает такой безопасной точки, прежде чем это наконец отменит Ваше приложение из планировщика задач.

можно открыть порт ядра и регистр для sleep/wake-up событий. В этом случае Ваше приложение получит событие, когда система захочет заснуть. У Вас есть несколько возможностей. Нужно ответить на него, что система может прогрессировать. Другой должен приостановить сон; однако, Apple заявляет, что определенные события могут быть приостановлены самое большее 30 секунд, после этого, система только продолжится, нравится ли Вашему приложению это или нет. И наконец, можно отменить его; хотя не все события могут быть отменены. Если система уже решила, что заснет, можно только приостановить это на самое большее 30 секунд или позволить ее сразу, Вы не можете отменить ее. Однако можно также слушать событие, где система спрашивает приложения, если она должна хорошо заснуть теперь, и там можно ответить "нет", заставив сон быть отмененными.

различие между "Является этим хорошо для сна" и "я планирую засыпание": первый отправляется, если настройки экономии электроэнергии применяются, то есть, если пользователь не переместил мышь или ввел что-нибудь в течение времени, настроенного там. В этом случае система просто спросит, если сон будет хорошо. В приложении как DVD-плеер Apple будет сказано "нет", потому что, скорее всего, пользователь наблюдает DVD и таким образом не взаимодействует с компьютером, все еще никакая причина заснуть. OTOH, если пользователь закрывает свою Книгу Mac, приложения, не спрашивают, система заснет наверняка и просто сообщает приложениям, которые имеют теперь до 30 секунд для реакции на нее.

события Пробуждения может также быть довольно интересно поймать. Например, если Ваша система просыпается, открытые файлы могли бы быть недоступными (внешний диск был отключен), или сетевые сокеты не будут работать больше (сеть изменилась). Таким образом, Вы можете re-init определенные части приложения перед использованием их и столкновения с ошибками, которые более или менее ожидаются.

страница Apple относительно ловли этих событий.

21
ответ дан 1 December 2019 в 02:56
поделиться

И если Вы устанавливаете время, это также, кажется, прыгает вперед к под управлением программам. Ничто специальное также.

0
ответ дан 1 December 2019 в 02:56
поделиться

Проверьте эту статью Wikipedia . Cavver корректен в заявлении, что вещи как сетевые соединения могут испытать таймаут, и таким образом те сервисы могут быть прерваны.

0
ответ дан 1 December 2019 в 02:56
поделиться

Это зависит от Вашего приложения.
, Если Вы взаимодействуете с внешними системами (думают, объединяясь в сеть или делая что-то по usb/firewire, и т.д.) тогда он мог бы быть затронут. Работа приложения OSX добирается для выполнения на ограниченный срок (макс. 10 мс), после которого она прервана ядром, которое планирует новый процесс от очереди процесса для работы ЦП. Это прозрачно для приложения, которое "думает", что работает все время на ЦП. Таким образом переход ко сну не отличается - кроме времени, переходя вперед.
, Если необходимо знать, что был переход к режиму ожидания, обратитесь к этим техническим замечаниям, которые детализируют, как получить уведомления об изменении состояния: Регистрация и нерегистрация для сна и уведомлений о следе

3
ответ дан 1 December 2019 в 02:56
поделиться

Я полагаю, что это просто приостановит все приложения везде, где они, оказывается, находятся.

Помнят, это происходит все время так или иначе. Приложения постоянно приостанавливаются и возобновляются из-за контекстного переключения. Так, действительно, часы могли перейти между любыми 2 инструкциями в Вашем приложении, хотя обычно не noticable/significant способом.

, Если ОС ожидала приложения для возврата к некоторому основному циклу, Вы могли бы столкнуться с ситуациями, где приложения заставляют сон зависать. Если бы они делают большую работу и возвращаются к диспетчеру цикла выполнения, они препятствовали бы тому, чтобы машина заснула. Это не было бы очень хорошо.:)

1
ответ дан 1 December 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: