首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CFRunLoopRunInMode与代码1一起退出,似乎没有添加任何内容。

CFRunLoopRunInMode与代码1一起退出,似乎没有添加任何内容。
EN

Stack Overflow用户
提问于 2015-10-19 08:09:24
回答 1查看 884关注 0票数 0

我创建了这样一个CGEventTap:

代码语言:javascript
复制
GetCurrentProcess(psn);

var mask =  1 << kCGEventLeftMouseDown | // CGEventMaskBit(kCGEventLeftMouseDown)
            1 << kCGEventLeftMouseUp | 
            1 << kCGEventRightMouseDown |
            1 << kCGEventRightMouseUp |
            1 << kCGEventOtherMouseDown |
            1 << kCGEventOtherMouseUp |
            1 << kCGEventScrollWheel;

mouseEventTap = CGEventTapCreateForPSN(&psn, kCGHeadInsertEventTap, kCGEventTapOptionDefault, mask, null);

if (!mouseEventTap.isNull()) {
      aRLS = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, mouseEventTap, 0);
      CFRelease(mouseEventTap);

      if (!aRLS.isNull()) {
            aLoop = CFRunLoopGetCurrent();

            CFRunLoopAddSource(aLoop, aRLS, kCFRunLoopCommonModes);

            CFRelease(aRLS);
            CFRelease(aLoop);

            rez = CFRunLoopRunInMode(ostypes.CONST.kCFRunLoopCommonModes, 10, false); // figure out how to make this run indefinitely
            // rez is 1 :(

      }

}

我的CFRunLoopRun立即退出,而不是运行10秒。它说代码是1,这意味着在这种模式下没有源。但我显然对公共模式选项kCFRunLoopRunFinished. The run loop mode mode has no sources or timers.做了一个kCFRunLoopRunFinished. The run loop mode mode has no sources or timers.。有人知道怎么回事吗?这是在非主线程上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 12:50:32

您不能在kCFRunLoopCommonModes中运行运行循环。CFRunLoopRunInMode()文档中清楚地说明了这一点。

kCFRunLoopCommonModes是一种虚拟模式。它基本上是一组其他的模式。它只能在向run循环中添加(或移除)源时使用,以表示“当run循环在集合中的任何模式下运行时监视此源”。但是当您运行一个run循环时,您必须在一个特定的真实模式下运行它,而不是这个表示一组其他模式的虚拟模式。

我建议,当您处理私有线程并且只希望监视私有源时,请将源添加到自定义模式并在该模式下运行run循环。自定义模式只是一个具有唯一值的字符串。例如,类似于"com.yourcompany.yourproject.yourmodespurpose".的东西使用自定义模式可以确保run循环不会做任何意外的事情,比如触发框架添加的源。

您不能发布aLoop。在它们的名字中没有“创建”或“复制”的函数不会给你所有权。

CFRunLoopRunInMode()的调用需要循环,因为每次从源处理事件(kCFRunLoopRunHandledSource == 4)或按超时(kCFRunLoopRunTimedOut == 3)时,它都会返回。如果它返回其他任何内容,则应该从循环中脱离出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33209518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档