1
SOおよびその他の例を使用してCGEventタップを作成する方法を学習しようとしています。CGEventを正しい方法で作成する
は、私が使用して、イベントのタップを作成する方法を知っている:私は
let runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0)
CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, .commonModes)
一部を実行した後
let eventTap = CGEvent.tapCreate(*/arguments to create the tap*/)
ではなく、私が見つけたすべての例では、オンラインでも、次の2行を追加します
CGEvent.tapEnable(tap: eventTap, enable: true)
CFRunLoopRun()
最後の2行を追加すると便利であるかどうかを簡単に説明できますか?
すてきな説明をありがとう。既に実行ループを持っていたプログラムでCFRunLoopRun()を呼び出すと、それは悪いですか? –
"実行ループは再帰的に実行できます。実行ループコールアウト内からCFRunLoopRun()を呼び出して、現在のスレッドのコールスタックでネストされた実行ループアクティベーションを作成できます。したがって、それが「悪い」かどうかは、ネストされた実行ループを必要とするかどうかによって異なります。 – Ssswift
そうですね、後で読むが、「スレッドごとに1つの実行ループがあります。スレッドの実行ループを作成も破棄もしません。」これは最も外側の実行ループを参照しますか? また、イベントタップではどのシナリオでネストされた実行ループが必要ですか? –