コードを書きましたので、それを連続して実行する必要があります。当初私はRunLoop.current.run()
を使用しました。それはうまく動作します。問題は、メインスレッドをブロックすることです。どのようにバックグラウンドでブロックせずに連続して実行できますか?メインスレッドを素早くブロックせずにスレッドを連続して実行します。
基本的なクラス構造:
class Keylogger
{
func start()
{
let observer = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque())
/* Connected and Disconnected Call Backs */
IOHIDManagerRegisterDeviceMatchingCallback(manager, Handle_DeviceMatchingCallback, observer)
IOHIDManagerRegisterDeviceRemovalCallback(manager, Handle_DeviceRemovalCallback, observer)
/* Input value Call Backs */
IOHIDManagerRegisterInputValueCallback(manager, Handle_IOHIDInputValueCallback, observer);
/* schedule */
IOHIDManagerScheduleWithRunLoop(manager, CFRunLoopGetMain(), CFRunLoopMode.defaultMode.rawValue)
print("Started")
}
}
そしてmain.swift
var logger = Keylogger()
logger.start()
RunLoop.current.run()
// Whatever written below this will not be executed obviously
に、私は(コードだけの作品です)バックグラウンドタスクの前にDispatchQueue
を使用しますが、それを実行する方法継続的に?
var d = Keylogger()
var ff = {
d.start()
}
var f = DispatchQueue(label: "Keylogger", qos: .userInteractive, attributes: .concurrent)
f.async(execute: ff)
while true
{}
しかしKeylogger
のstart()
が実行されることはありません:
私はこのを試してみました。
実行可能ファイルを作成し、実行ファイルをNSTask
で実行することを考えました。それ以外の方法はありませんか?
バックグラウンドキューで無限のタスクを呼び出すタイマーを繰り返し起動することができます。 http://stackoverflow.com/a/29564713/1457385 – shallowThought
まだ回答はありますか? – SkrewEverything
@SkrewEverythingはい – unknownymouse