Tag: macos carbon

从另一个线程调用CFRunLoopStop是否安全?

我的(主要是POSIX)应用程序的Mac构建产生一个子线程,它调用CFRunLoopRun()来执行事件循环(从MacOS获取网络配置更改事件)。 什么时候打包并离开,主线程在子线程的运行循环上调用CFRunLoopStop(),此时CFRunLoopRun()在子线程中返回,子线程退出,主线程(这是阻止等待子线程退出)可以继续。 这似乎有效,但我的问题是:这是一种安全/推荐的方式吗? 特别是,从另一个线程调用CFRunLoopStop()容易导致竞争条件? 据我所知,Apple的文档对此主题保持沉默。 如果从主线程调用CFRunLoopStop()不是解决方案,那么什么是好的解决方案? 我知道我可以让子线程调用CFRunLoopRunInMode()并经常唤醒以检查布尔值或其他东西,但我宁愿不让子线程做任何轮询,如果我可以避免它。

如何处理MacOS / X 10.8.x中弃用的Carbon函数?

我有一个C ++代码库已经存在了一段时间(10年以上)并且它编译并运行良好,但我注意到当我在OS / X 10.8.x(Mountain Lion)下编译它时,编译器会发出关于的弃用警告它调用的一些Carbon函数: ../system/SetupSystem.cpp:575:44: warning: ‘UpTime’ is deprecated: first deprecated in OS X 10.8 [-Wdeprecated-declarations] ../system/SetupSystem.cpp:575:22: warning: ‘AbsoluteToNanoseconds’ is deprecated: first deprecated in OS X 10.8 [-Wdeprecated-declarations] ../system/SystemInfo.cpp:249:25: warning: ‘MPProcessors’ is deprecated: first deprecated in OS X 10.7 [-Wdeprecated-declarations] 我想将这个代码库升级到Apple批准的新方式(因此,如果/当Apple最终删除这些function时,避免警告和未来的痛苦),但我无法弄清楚新标准是什么。 我查看了developer.apple.com上的OS / X文档,但是我的搜索技能缺乏或者他们的文档都没有,因为我几乎找不到这些函数,也没有关于它们的替换。 我有的具体问题: 为什么不推荐使用这些function? 我应该打电话给哪些function? 是否有一些我不知道的秘密文档存储库会为我回答这些问题?

宏突出显示为关键字:pascal

在查看FunkyOverlayWindow的示例代码时,我发现了一个非常有趣的声明: pascal OSStatus MyHotKeyHandler( EventHandlerCallRef nextHandler, EventRef theEvent, void *userData ); 在这里, pascal被突出显示为关键字(标准Xcode颜色方案中的粉红色)。 但我发现它是一个宏,有趣的是在文件CarbonCore / ConditionalMacros.h中定义为: #define pascal 那么,它应该做什么(或者是什么)呢? 也许它在过去有一些特殊的用途? 虽然这里的讨论可能不太适合,但如果这与答案有关,那么知道为什么Apple仍在使用Carbon会很有趣。 我没有Carbon的经验,但是这段代码似乎设置了一个键盘事件处理程序,让我想知道是否有任何优于Cocoa方法的优点。 碳不会被彻底清除吗?

有没有办法检查进程是64位还是32位?

我试图从进程pid中找到进程类型(32位/ 64位)? 我使用此处描述的GetBSDProcessList方法获取进程信息和进程列表。 我们如何获取流程类型信息? 有任何想法吗? 我可以使用已定义的( i386 )或已定义的( x86_64 ),但前提是我们正在处理中。 我不在这个过程中。