GCD 和 RunLoop

2024-01-03

在我的应用程序中我添加了一个CFMach端口参考 (via CFMachPortCreateRunLoopSource) 到线程CF运行循环

现在我问自己,这可以使用 GCD 来完成吗?让我们说,而不是生成我自己的NSThread并添加创建的CFRunLoop 源参考通过其运行循环CFRunLoop添加源,将事件端口添加到调度的运行循环中?

我认为由于 GCD 的内部工作原理,这很可能不起作用,但我真的不知道。

Update


到目前为止我已经得到了这个,但是事件点击的回调函数和dispatch_source_event_handler块都没有被调用。有任何想法吗?

CFMachPortRef port = CGEventTapCreate(kCGSessionEventTap,
                                      kCGHeadInsertEventTap,
                                      opts,
                                      desc_.eventMask,
                                      _CGEventCallback,
                                      self);

// create dispatch source
dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_RECV,
                                                  CFMachPortGetPort(port),
                                                  0,
                                                  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0));

// set event handler
dispatch_source_set_event_handler(source, ^{
    printf("handle me!\n");
});

dispatch_resume(source);

您实际上可以使用 GCD 来监视 Mach 端口,使用dispatch_source_create()功能。代码看起来像这样:

mach_port_t myPort; //assume you have this already
dispatch_source_t portSource;

portSource = dispatch_source_create(DISPATCH_SOURCE_TYPE_MACH_RECV, myPort, 0, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT));
dispatch_source_set_event_handler(portSource, ^(void) { //code for handling incoming message here });

dispatch_resume(portSource);

每当消息进入端口时,您作为事件处理程序传入的块都应该被调用,并且您可以在那里处理消息。此示例仅使用 GCD 提供的全局队列来处理消息,但如果您愿意,您可以创建自定义队列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GCD 和 RunLoop 的相关文章

  • Objective-C NSString for 循环与characterAtIndex

    我试图逐个字符地循环遍历 NSString 但出现 EXC BAD ACCESS 错误 您知道如何正确执行此操作吗 我已经在谷歌上搜索了几个小时但无法弄清楚 这是我的代码 m self textLength self text length
  • NSTextField 字体样式在选择时重置

    Context 在 Interface Builder 中 我有一个不可编辑的标签 NSTextField 标签的内容是使用 Cocoa Bindings 创建的 绑定的值是NSAttributedString 使用数值转换器创建 看图片
  • UITableViewCell显示多种字体

    我想在 uitableviewcell 中以类似于 iPhone 地址簿的不同字体显示两个单词 例如 约翰Buchanan 您应该使用两个 UILable 或者您可以使用OH属性标签 https github com AliSoftware
  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei
  • 接收者'ClassName'是一个转发类,对应的@interface可能不存在

    我目前正在寻找一个UIPickerTable在 UIPickerView subviews 内 所以我循环并执行isKindOfClass UIPickerTable class 它有效 但由于 UIPickerTable 的标头未公开 我
  • rvm:未找到命令 MAC OX

    真的 我不知道发生了什么 对不起 如果这个问题太菜鸟了 但我找不到这个问题的解决方案 bash rvm 找不到命令 我试过这个 curl L https get rvm io https get rvm io bash s 版本最新 但我仍
  • 对 Mac“捆绑”文件进行版本控制的最佳方法

    所以你知道很多 Mac 应用程序都使用 捆绑包 对于你的应用程序来说 它看起来像是一个文件 但实际上它是一个包含许多文件的文件夹 对于要处理此问题的版本控制系统 它需要 检出目录中的所有文件 以便应用程序可以根据需要修改它们 at chec
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的
  • 体系结构 x86_64 的未定义符号:用于 caffe 构建

    我收到此错误的原因是caffe http caffe berkeleyvision org 建造 我该如何修复它 我使用的是 Mac OSX Yosemite 10 10 1 控制台日志 Machida no MacBook Air caf
  • ld:找不到 -lGoogleToolboxForMac 的库

    我正在通过 pod 实施 firebase 设置 我的 Pods 文件如下所示 Uncomment the next line to define a global platform for your project platform io
  • 命令行工具中的框架问题

    在每个人开始向我扔其他堆栈溢出和论坛帖子之前 我把它们都看了 他们都没有帮忙 我有一个简单的 cmd 工具 名为swizzler并想要嵌入SwizzleSrc其中的框架 我已经遵循了所有教程并且堆栈溢出但没有运气 这就是我得到的 Build
  • 如何在ios开发中从mp3文件中提取元数据

    我正在开发一个带有云存储的 ios 音乐播放器 我需要提取音乐信息 如标题 艺术家 艺术作品 我有一个名为 playit 的操作 可以播放和暂停 mp3 文件 它还应该使用与 mp3 文件关联的元数据来填充一些 UILables 和 UII
  • 如何使用 Objective-C 解析 JSON?

    我是 iPhone 新手 谁能告诉我解析此数据并获取活动详细信息 名字和姓氏的步骤 error false data activity id 35336 user id 1 user first name Chandra Bhusan us
  • HttpClient setReachabilityStatusChangedBlock 声明没有接口

    尝试使用 AFNetworkings ReachabilityStatusChanged 但得到 HTTPCLIENT 没有可见的 interface 声明选择器 setReachabilityStatusChangeBlock 但Http
  • 如何获得 UICollectionView 的矩形

    我想在 UICollectionView 中找到节标题的框架 我对 UITableView 也有类似的情况 为此 我能够通过执行以下操作来获得其正确性 CGRect rect self tableView rectForHeaderInSe
  • XOR或其他简单的文件混淆方法ios目标c

    我正在开发一个使用受版权保护的 pdf 文件的 ios 应用程序 我正在寻找一些简单的方法来混淆文件以确保安全 这些方法不需要我经历额外的大众市场 CCATS 加密审查流程 但也将确保版权所有者已尽我所能来保证他们的数据安全 当然 我用密码
  • iPad 横向框架宽度和高度混合

    我已经完成了这个问题所说的 横向模式仅适用于 iPhone 或 iPad https stackoverflow com questions 2647786 landscape mode only for iphone or ipad 但v
  • 如何调用ical同步服务?

    我有一个通过日历存储框架与 iCal 同步的应用程序 我注意到我需要打开 iCal 同步服务才能启动并将应用程序添加的事件和任务传输到我的 ipad 和 iphone 所以 我的问题是 有没有办法在不打开ical的情况下启动ical同步服务
  • 使用后台配置时 NSURLSessionDownloadTask 不断重试

    当涉及到缓慢的后端和使用后台配置下载数据时 我遇到了问题 NSURLSessionConfiguration sessionConfig NSURLSessionConfiguration backgroundSessionConfigur
  • 初始化Object中的空字符串?

    有人使用以下方法来初始化 NSstring NSString astring NSString alloc init 我想知道为什么不直接使用 NSString atring nil or NSString astring 没有semant

随机推荐

  • 在文本正文中定位 ASCII 艺术图像,并具有一定的错误容忍度

    是否有任何算法可以找到以下 ASCII 艺术图像 在以下正文中 此处完成文件 https dl dropbox com u 28167627 TestData txt
  • 如何在 Scala 3 中进行类型级添加?

    如何在 Scala 3 中实现类型级操作 在本例中为加法 这是我想做的 这不能编译 case class foo S lt Int Singleton value Double def bar T lt Int Singleton that
  • 显示所有文本区域行而不滚动[重复]

    这个问题在这里已经有答案了 如何显示所有文本区域行而不是垂直滚动 我尝试使用 css 使用 min height 和 max height 和 height auto 但不起作用 form control width 400px min h
  • Spark Dataframe执行UPDATE语句

    Hy guys 我需要使用 Apache Spark DataFrame 执行 jdbc 操作 基本上我有一个名为 Measures 的历史 jdbc 表 我必须在其中执行两项操作 1 设置旧measure记录的endTime有效性属性为当
  • 支持 __LINE__ 宏和其他宏的 C++ 风格记录器

    我想制作一个可以像这样使用的记录器std cout 但我想记录一些额外的数据 例如日期 时间 LINE func and FILE 应该自动保存到文件中 Example ToolLogger log log lt lt some data
  • 当矩阵包含许多小条目时,base::chol() 会变慢

    我注意到了base chol 当矩阵包含许多小元素时 速度会严重减慢 这是一个例子 disable openMP library RhpcBLASctl blas set num threads 1 omp set num threads
  • 什么是图像 uri?列表视图中的图像 uri

    有人可以向我解释一下什么是图像 uri 吗 我有一个带有列表视图的 Android 应用程序 可以附加图像 并且该列表视图显示 imag uri 谢谢 URI 是一个地址 例如 http www google com image png它指
  • Jquery“如果这个和如果那个”然后执行此操作

    这应该很简单 但它对我不起作用 我想说 如果它没有类 current 并且主体类不等于 home 则执行此操作 这是我正在尝试的 除其他外 但无济于事 只有第一个条件有效 nav1 gt ul gt li mouseleave functi
  • JCenter 和 Bintray 不同步

    我发布了一个 Scala 库Bintray https bintray com angelcervera maven osm4scala 1 0 对于 Scala 2 11 和 2 10 But in JCenter https jcent
  • 为什么我的 Azure Function App 时间戳少了一个小时

    我有一个每五分钟运行一次的 Azure Function App 该文档有一个时间戳字段 使用 DateTime Now 我住在英国 目前是英国夏令时 26 09 18 比 GMT 早 1 小时 我的 Azure 数据中心位于英国南部 时间
  • 如何在mybatis 3中使用if语句比较字符串-动态sql

    在myBatis 3中使用动态sql时如何比较字符串 以前使用 iBatis 您可以执行以下操作
  • Delphi XE2 RTTI坏了?

    我最近从 D2010 迁移到 DXE2 并在 XE2 和 XE3 在我的朋友 XE3 中测试 中发现了一个与类内 TBytes 字段的 RTTI 生成相关的致命错误 或功能 我发现类内 TBytes 变量的 RTTI 信息永远不会生成 以下
  • Git 克隆错误:“致命:不允许...引用的多次更新”

    我尝试时遇到错误git clone一个存储库 git clone https github com laradock laradock git Cloning into laradock remote Enumerating objects
  • 使用 LINQ 在 OrderBy 中自定义排序逻辑

    对字符串列表进行排序的正确方法是什么 我希望以下划线 开头的项目位于列表的底部 否则一切都是按字母顺序排列的 现在我正在做这样的事情 autoList OrderBy a gt a StartsWith ZZZZZZ a a 如果您想要自定
  • Android 媒体播放器错误 (1,-1010)

    我正在尝试从 URL 流式传输音乐 我正在使用 SeekBar 来更改歌曲的位置 尝试将歌曲的位置更改为尚未下载的位置时出现错误 在其他情况下 如果歌曲已完全下载 则代码可以正常工作 出现以下错误 E MediaPlayerNative 错
  • Spring boot嵌入式tomcat - 413请求实体太大

    我在 IBM 公共云上运行 我有 apu 连接来访问 Cloud Foundry 微服务 我已经浏览了很多帖子并尝试了各种方法 但我似乎无法让它发挥作用 这是我的 Spring Boot 属性文件配置设置 The name of the a
  • MySQL:在结果之间使用日期条件

    我有一个执行此操作的 SQL 语句 group by date having date between 2010 07 01 and 2010 07 10 结果如下 sum test day 20 2010 07 03 120 2010 0
  • 基于条件标准寻找模式

    我希望能够在相邻列中根据特定标准找到最常见的值 例如 gt ROW A ROW B gt Blue Jason gt Blue Jason gt Blue Charles gt Red Alfred gt Red Alfred gt Red
  • 回调函数抛出意外的“不一致的参数”错误

    我正在使用 GNU Octave 版本 4 4 1 我正在尝试通过包含两个滑块来制作简单振荡器的交互式绘图 这两个滑块将允许更改初始速度和振荡器质量 绘图本身以及带有一个滑块 用于速度 的脚本都显示良好 这是带有回调函数的脚本的一部分 fu
  • GCD 和 RunLoop

    在我的应用程序中我添加了一个CFMach端口参考 via CFMachPortCreateRunLoopSource 到线程CF运行循环 现在我问自己 这可以使用 GCD 来完成吗 让我们说 而不是生成我自己的NSThread并添加创建的C