macos - 如何判断 CGEvent 触发的操作何时完成?

标签 macos cocoa

我正在使用CGEventPost()以编程方式发布键盘和鼠标事件。这些事件最终将触发其他事件/操作(例如,某些窗口变为事件状态、按下按钮、在文本字段中输入字母)。为了同步线程,我想知道何时由特定 CGEvent 触发所有这些事件。已完成处理。

全部CGEventPost() s 最终将作用于单个应用程序的单个窗口。

编辑:

Nielsbot 的解决方案效果很好。我最终为 CCL 粗略地实现了 MCL 的事件派发功能。该函数会阻塞,直到 Cocoa 运行进程循环中的所有当前事件都执行完毕。由于所有键盘和鼠标事件最终都会触发在此线程上运行的操作,因此这种方法效果很好。

我对此唯一担心的是,事件调度在 CGEvent 触发事件循环中的操作“之前”被调用,但我的测试当前表明这种情况没有发生。所以我现在正在使用这个解决方案。

就 FYSA 而言,发布的事件似乎需要保守的 1 毫秒才能进入运行循环,至少在我的设置中是这样。

(defun event-dispatch ()
  (with-shadow (gui::queue-for-event-process
                 (lambda (f &key at-start)
                   (declare (ignore at-start)) 
                   (funcall fun-orig f :at-start nil))) 
    (gui::call-in-event-process (lambda () ()))))

最佳答案

插入自定义事件类型队列作为标记怎么样?等到该事件触发您自己的一些代码 - 这可能足以表明您之前发布的所有事件都已得到处理...

关于macos - 如何判断 CGEvent 触发的操作何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836049/

相关文章:

json - 使用 Swift 更新字典数组中的值

ios - 在 mac os 中绘制图像

macos - 当 Swift 中 NSTextField 内的文本更改时执行回调

macos - 在 CMake 中将 SDK 交叉编译到 OSX

c++ - 在 KCachegrind 中获取源注释

cocoa - ComponentsJoinedByString 给了我 EXC_BAD_ACCESS

ios - Xcode 4.3 在 Mac OS X 10.7.3 中安装错误?

macos - cocoa 应用程序中的二进制文件签名错误

macos - QTKit:确定 QTMovie 是否暂停?

objective-c - 为什么在声明 setter 和 getter 时,我不需要为 NSDate 对象的实例声明 setter?