- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,我将一个CFMachPortRef(通过CFMachPortCreateRunLoopSource)添加到线程CFRunLoop
现在我问自己,这可以使用 GCD 来完成吗?假设不是生成我自己的 NSThread 并通过 CFRunLoopAddSource 将创建的 CFRunLoopSourceRef 添加到其运行循环,而是将事件端口添加到调度的运行循环?
我认为由于 GCD 的内部工作原理,这很可能不起作用,但我真的不知道。
更新
<小时/>到目前为止我已经得到了这个,但是事件点击的回调函数和dispatch_source_event_handler block 都没有被调用。有什么想法吗?
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);
每当消息进入端口时,您作为事件处理程序传入的 block 都应该被调用,并且您可以在那里处理消息。此示例仅使用 GCD 提供的全局队列来处理消息,但如果您愿意,您可以创建自定义队列。
关于objective-c - GCD 和 RunLoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255428/
我正在尝试获取一个使用 GCDAsyncSocket 的简单示例,并且发现我缺少某些理解,希望各位好心人可以帮助解释这一点。 我已经设置了下面的 GCDAsyncSocket 内容: dispatch
实际上什么是运行循环? 与线程有什么区别? 哪些地方必须使用 run loop 哪些地方不需要? 最佳答案 RunLoop 是一种循环机制。这是一种无限循环。 Thread是代码执行(线程)的概念模型
我想显示一个 UICollectionView 但我在加载图像时遇到问题。 AlAssetsLibrary 不会返回到运行循环。 我得到的输出为 2013-04-12 11:36:25.429 Fil
我正在尝试创建一个自定义运行循环,它基本上以 FIFO 顺序运行任务,并提供三个 API:addTask(Task task)、run() 和 exit() 任务界面 public interface
所以,我有一个计时器,它每 0.1 秒将我的应用程序委托(delegate)中的变量加一。在我的 tableViewController 中,我将此数字显示在单元格中。在 Controller 中,有
我有一台 iPod Touch 第 2 代,我正在尝试使用照片名称从资源库中检索照片。我在设备上运行了恢复以确保它是出厂版本 4.1。 我的头文件有: #import { BOOL fetc
我目前正在为我的项目做一个 FTP 客户端。我已经安排了带有runloop的readstream/writeStream来从硬盘读取文件/将文件写入硬盘并将其发送到服务器。上传和下载文件后,我取消了运
我正在寻找类似于的行为 [[NSNotificationQueue defaultQueue] enqueueNotification:not postingStyle:NSPostWhenIdle
所以我们的应用程序在 SocketRocket 中已经经历了一段时间的崩溃。我们每天从中得到大约 20 次崩溃,堆栈跟踪如下: Crashed: com.apple.root.default-over
iOS 上的操作顺序是什么? 我正在特别考虑时间安排 setNeedsLayout 和 layoutSubviews setNeedsDisplay 和 drawRect 触摸识别 [NSTimer
在 Swift 应用程序中,我使用了计时器。我不希望在创建 Timer 并将其插入 Runloop 后保留对 Timer 的引用。我希望能够使它无效。有没有办法在不保留引用的情况下做到这一点? 最佳答
IOS中的进程和线程 通长来说一个app就是一个进程 ios开发中较少的运用进程间的通信(XPC),绝大多数使用线程。 在ios开发中,为了保证流畅性以及线程安全,所有与UI相关的操作都应该放在主
我在使用dispatch_async 时遇到一些问题。在我的应用程序主/UI 线程上,我在全局队列上调用dispatch_async,并告诉它执行一些具有完成处理程序的函数调用。我期望完成处理程序被调
我的 Cocoa 应用程序中有一些处理,有时最终会调用数据层次结构来完成一系列工作作为事件的结果。每个小块都会创造和破坏一些资源。我不希望这些资源大部分时间都在身边,但我想找到一种聪明的方法来在所有工
在我的应用程序中,我将一个CFMachPortRef(通过CFMachPortCreateRunLoopSource)添加到线程CFRunLoop 现在我问自己,这可以使用 GCD 来完成吗?假设不是
我正在编写一个基础工具。我必须进行线程来区分不同的正在进行的任务。 我尝试进行线程处理,但它不断崩溃。最后我找到了原因,我需要运行自己的运行循环。 有人可以帮忙举一些简单的例子吗?我尝试了以下代码,但
每个Thread都有自己的RunLoop,DispatchQueue如何与它们交互? DispatchQueue 是使用 RunLoop 将任务分派(dispatch)到 Thread 还是通过其他方
我正在编写一个 iPad 应用程序,但遇到了 UI 响应/锁定问题。 我有一个带有项目的UITableView,当单击某个项目时,它会在互联网上显示并获取该项目并显示它。程序的其余部分(未显示)将使用
我试图让这个 runloop 永远运行(如果不是永远至少一天的话)我正在为 runloop 使用以下函数 [self.runLoop runUntilDate:[NSDate dateWithTime
我的要求是我想每 6 秒调用一个 API 从我的服务器请求一些新信息,所以我编写了如下代码: MyBackgroundThread(){ while(self.isStop){
我是一名优秀的程序员,十分优秀!