- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 Android 平台上使用开源的 libDispatch (GCD)。因此,大多数复杂的耗时任务都是通过 NDK 完成的(我在其中使用 libDispatch)。
对于某些调用,我正在使用 dispatch_async(get_main_queue)...这就是问题所在...我能够在并发队列中运行任务,但不能在主队列中运行。因为这需要调用 dispatch_main() ,我们不能在这里做,因为在这种情况下 Java 线程将被阻塞。那么,是否可以在某个辅助线程上运行 Java UI 并 Hook dispatch_main() 以在此处为 dispatch_main_queue 提供服务?或者:我是否需要通过 JNI 从 JAva 主 UI 线程继续为 main_queue 提供服务?
最佳答案
查看 _dispatch_main_queue_callback_4CF
,这是您可以调用以耗尽主队列的函数。它会在执行排队操作后像正常的明智函数一样返回,而不是像 dispatch_main
那样杀死线程。
请注意,您需要定期从 Java UI 线程调用 _dispatch_main_queue_callback_4CF
,可能是每次迭代。官方 Cocoa 实现使用 _dispatch_queue_wakeup_main()
,它使用 mach 消息将主线程踢出任何 sleep 状态,因此它可以保证快速调用回调函数,但您必须做一些工作才能启用它并构建您自己的 libDispatch 端口。实际上,在 Android 上,我不认为主 UI 线程会在您的应用程序处于 Activity 状态时进入休眠状态,因此这应该不是问题。
在 libDispatch 站点上有一个开放的工单,地址是 https://libdispatch.macosforge.org/trac/ticket/38使 _dispatch_main_queue_callback_4CF
成为公共(public)函数。票证标记为“已接受”,但没有说明是否/何时会发生。
关于android - 在 Android 上没有 dispatch_main 的 libDispatch 服务于主队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916567/
我有时会在 libdispatch 深处崩溃,以下回溯源自 SecItemCopyMatching功能。 * thread #1: tid = 0x169ee8, 0x0374c830 libdisp
我正在尝试将 GCD(Grand Central Dispatch)应用程序移植到 Ubuntu,我发现了 libdispatch ubuntu 包 apt-get install libdi
我正在尝试构建一个必须管理自己的运行循环的应用程序。我想在此应用程序中使用 libdispatch。但是,使用 libdispatch 需要调用 dispatch_main() ,这是一种阻塞方法。我
Date/Time: 2013-05-22 21:31:31.863 -0400 OS Version: iOS 6.1.3 (10B329) Report Version: 104 Excep
我这里有一个奇怪的问题。 我使用仪器来查看我的应用程序的泄漏情况。 而且我发现corehandwriting函数会被libdispatch.dylib调用,占用很大 内存空间大小。 但是,如果将此应用
我正在尝试编译 libdispatch for linux在安卓系统上。但是我在项目文件中找不到任何适用于 Android 的说明。 我可以看到有 several计算器 questions关于使用 l
我很难理解下面的代码: struct dispatch_block_private_data_s { DISPATCH_BLOCK_PRIVATE_DATA_HEADER(); sta
我刚刚向 App Store 发布了一个 OSX 应用程序,有报告称它在 OSX 10.9.5 上崩溃 以下是用户崩溃报告中的相关信息: Crashed Thread: 0 Dispatch qu
我喜欢 dispatch_data_t。它在内存范围之上提供了一个有用的抽象:它提供引用计数,允许消费者创建任意子范围(参与父范围的引用计数),连接子范围等。(我不会'不要费心去了解血淋淋的细节——文
我很想尝试 grand central dispatch,但我只能在 Ubuntu 工作站上进行开发。 libdispatch 和 c/obj-c 等的 block 扩展是否在 Linux 上可用?如
在基于文档的启用 ARC 的应用程序中,我有一个正在打开 HTML 文件的 WebView。我们的想法是进行一些编辑,然后保存到 WebArchive。当我运行 Instruments 时,我发现随机
早上好 我的应用程序遇到了崩溃。当用户尝试启动它时,他等了一分钟,然后引发了一个 std::exception。真的,我无法自己重现这个错误,但这似乎是一个很常见的问题。 我唯一可以跟踪的是系统日志中
我正在研究多线程,与使用 pthread.h 和 pthreads-win32好得多的选择。然而,尽管看起来 libdispatch 正在或即将在大多数较新的 POSIX 兼容系统上工作……我不得不问
我在 Android 平台上使用开源的 libDispatch (GCD)。因此,大多数复杂的耗时任务都是通过 NDK 完成的(我在其中使用 libDispatch)。 对于某些调用,我正在使用 di
我正在编译 Apple libdispatch。但是出现了错误错误:无法找到 SDK“macosx.internal”(在目标“libdispatch”中) 有没有人以前遇到过这个错误? 最佳答案 b
目标是在 Raspberry Pi 3 上运行 swift 和 libDispatch。我使用的是 Ubuntu Core 16.04 我现在的位置:我试图编译 SR-397 ( https://bu
有关更详细的信息,请参阅以下链接: Project A Inception - We must go deeper 简而言之:我在开发 cocos2d 游戏时注意到内存分配失控。我回溯并检查了 coc
查看多个 iOS 崩溃日志,我发现堆栈跟踪几乎相同,唯一的异常(exception)是来自 libdispatch.dylib 的上述行。我很好奇这种差异是否有意义(因此,这些崩溃应该分成不同的桶)或
我正在 Swift 3 中创建一个服务器端应用程序。我选择了 libevent 来实现网络代码,因为它是跨平台的,并且没有 C10k 问题。 Libevent 实现了它自己的事件循环,但我想保持 CF
我正在努力在 Ubuntu 16.04 上安装 Swift 3.0 和 GCD。这在今天应该是可能的,对吧? 以下是从 swift.org 下载 Swift 3、从 GitHub 克隆、构建和安装 s
我是一名优秀的程序员,十分优秀!