Что такое какао-эквивалент UpdateSystemActivity? - PullRequest
4 голосов
/ 25 августа 2009

Я конвертирую приложение Carbon в приложение Cocoa и не могу найти эквивалент Cocoa для:

UpdateSystemActivity(UsrActivity);

Кто-нибудь из Mac хочет показать мне правильное направление? Спасибо.

ОБНОВЛЕНИЕ : Я строю 64 бита. Сборка 32 бита работает нормально, но я получаю символ, не объявленный в этой области ошибок для UpdateSystemActivity (и других), когда я строю для 64 бита.

UPDATE2 : я импортирую следующее:

#import <Cocoa/Cocoa.h>
#import <Carbon/Carbon.h>
#import <OpenGL/CGLMacro.h>

Есть ли еще что-то, что мне нужно импортировать при сборке 64-бит?

ОБНОВЛЕНИЕ3 : Добавление #import <CoreServices/CoreServices.h> не помогло. Я все еще получаю ошибки компилятора, говорящие мне, что UpdateSystemActivity и UsrActivity не были объявлены в этой области.

UPDATE4 : Хорошо, файл не найден в OSServices / Power.h. Я строю против 10.5 SDK и быстрый поиск показывает:

$ pwd
/Developer/SDKs
$ find . -name Power.h
./MacOSX10.3.9.sdk/Developer/Headers/CFMCarbon/OSServices/Power.h
./MacOSX10.3.9.sdk/Developer/Headers/CFMCarbon/Power.h
./MacOSX10.3.9.sdk/Developer/Headers/FlatCarbon/Power.h
./MacOSX10.3.9.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/Power.h

./MacOSX10.4u.sdk/Developer/Headers/CFMCarbon/OSServices/Power.h
./MacOSX10.4u.sdk/Developer/Headers/CFMCarbon/Power.h
./MacOSX10.4u.sdk/Developer/Headers/FlatCarbon/Power.h
./MacOSX10.4u.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/Power.h

./MacOSX10.5.sdk/Developer/Headers/FlatCarbon/Power.h
./MacOSX10.5.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/Headers/Power.h

Еще я получаю:

Mac.mm:6:29: error: OSServices/Power.h: No such file or directory
Mac.mm:6:29: error: OSServices/Power.h: No such file or directory

Ответы [ 3 ]

4 голосов
/ 11 декабря 2014

В OS X 10.6 и более поздних версиях IOKit можно использовать для отключения режима сна. Создайте IOPMAssertion, если вы хотите отключить режим сна, и уничтожьте его, если вы хотите снова разрешить сон.

#import <IOKit/pwr_mgt/IOPMLib.h>

// kIOPMAssertionTypeNoDisplaySleep prevents display sleep,
// kIOPMAssertionTypeNoIdleSleep prevents idle sleep
// reasonForActivity is a descriptive string why sleep is disabled

CFStringRef* reasonForActivity= CFSTR("Describe Activity Type");

IOPMAssertionID assertionID;
IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep, kIOPMAssertionLevelOn, reasonForActivity, &assertionID);

if (success == kIOReturnSuccess)
{ 
    //Add the work you need to do without the system sleeping here.

    success = IOPMAssertionRelease(assertionID);
    //The system will be able to sleep again.
}

Дополнительная информация: https://developer.apple.com/library/mac/qa/qa1340/_index.html

2 голосов
/ 25 августа 2009

Проблема здесь заключается в строке в OSServices.h, которая исключает Power.h, если определено __LP64__. При сборке 64 бит на 10.5 UpdateSystemActivity действительно не определена.

Хорошая новость заключается в том, что символ действительно существует в CoreServices.framework. Есть два способа получить к нему доступ.

  1. Форвард объявить это: extern "C" OSErr UpdateSystemActivity (UInt8);
  2. Явно включите Power.h, который вы пробовали. Проблема с вашей попыткой заключается в том, что OSServices / не находит пути к поиску. Вы можете включить его следующим образом: #import

У меня нет удобной копии SnowLeopard, но следующее, что нужно сделать, - это проверить, исправлена ​​ли она там. Если это не так, подайте RADAR, поскольку это явно ошибка SDK.

1 голос
/ 25 августа 2009

Вы по-прежнему сможете звонить UpdateSystemActivity из своего приложения Cocoa - оно не помечено как устаревшее.

В документации для API указывается импорт CoreServices/CoreServices.h для получения API - однако поиск по заголовкам (особенно в OSServices/OSServices.h) показывает, что файл отсутствует в 64-битной среде. Тем не менее, есть секции Power.h (где определено UpdateSystemActivity), которые отключены для 64 битов, и UpdateSystemActivity не является одним из них.

В свете этого попробуйте #import <OSServices/Power.h> напрямую и посмотрите, работает ли это. (Вы должны будете включить инфраструктуру CoreServices в свой проект для заголовка, который также будет найден.)

...