How to set up live stream in Swift?

I am trying to implement a function set_realtime()from this OSX Planning Guide in Swift.

I'm stuck on thread_policy_set(). The following is a compiler error:

"It is impossible to specialize not a general definition"

I also tried a couple of other things, but getting various type mismatch errors with &policy. Any suggestions would be appreciated! Thank!

func set_realtime(period: UInt32, computation: UInt32, constraint: UInt32) -> Bool {
    let TIME_CONSTRAINT_POLICY: UInt32 = 2
    let TIME_CONSTRAINT_POLICY_COUNT = UInt32(MemoryLayout<thread_time_constraint_policy_data_t>.size / MemoryLayout<integer_t>.size)
    let SUCCESS: Int32 = 0
    var policy: thread_time_constraint_policy
    var ret: Int32
    let thread: thread_port_t = pthread_mach_thread_np(pthread_self())

    policy.period = period
    policy.computation = computation
    policy.constraint = constraint
    policy.preemptible = 1

    ret = withUnsafeMutablePointer<integer_t>(to: &policy, { ptr -> Int32 in
        thread_policy_set(thread, TIME_CONSTRAINT_POLICY, ptr, TIME_CONSTRAINT_POLICY_COUNT)
    })

    if ret != SUCCESS {
        print(stderr, "set_realtime() failed.\n")
        return false
    }
    return true
}
+3
source share
1 answer

You cannot add a placeholder type withUnsafeMutablePointer()to draw a pointer to another type. You should "reset" the pointer instead of:

ret = withUnsafeMutablePointer(to: &policy) {
    $0.withMemoryRebound(to: integer_t.self, capacity: Int(TIME_CONSTRAINT_POLICY_COUNT)) {
        thread_policy_set(thread, TIME_CONSTRAINT_POLICY, $0, TIME_CONSTRAINT_POLICY_COUNT)
    }
}
+1

Source: https://habr.com/ru/post/1681519/


All Articles