Swift 2的pthreads和服务质量



我正在玩pthreads和服务质量。当然,我认为最好的方法是在Xcode Playground中。

下面的代码运行正常。

var user_interactive_thread: pthread_t = nil
pthread_create(&user_interactive_thread, nil, { (x:UnsafeMutablePointer<Void>) in
    print("pthread ran")
    return nil
}, nil)

但随后我尝试添加QoS属性:

var user_interactive_thread: pthread_t = nil
var user_interactive_qos_attr: pthread_attr_t
pthread_attr_init(&user_interactive_qos_attr)
pthread_attr_set_qos_class_np(&user_interactive_qos_attr, QOS_CLASS_USER_INTERACTIVE, 0)
pthread_create(&user_interactive_thread, &user_interactive_qos_attr, { (x:UnsafeMutablePointer<Void>) in
    print("User interactive pthread")
    return nil
}, nil)

但是我得到了以下编译错误:

Playground execution failed: /var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground7.swift:16:42: error: address of variable 'user_interactive_qos_attr' taken before it is initialized
pthread_create(&user_interactive_thread, &user_interactive_qos_attr, { (x:UnsafeMutablePointer<Void>) in
                                         ^
/var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground7.swift:11:5: note: variable defined here
var user_interactive_qos_attr: pthread_attr_t
    ^
/var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground7.swift:14:31: error: address of variable 'user_interactive_qos_attr' taken before it is initialized
pthread_attr_set_qos_class_np(&user_interactive_qos_attr, QOS_CLASS_USER_INTERACTIVE, 0)
                              ^
/var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground7.swift:11:5: note: variable defined here
var user_interactive_qos_attr: pthread_attr_t
    ^
/var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground7.swift:13:19: error: address of variable 'user_interactive_qos_attr' taken before it is initialized
pthread_attr_init(&user_interactive_qos_attr)
                  ^
/var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground7.swift:11:5: note: variable defined here
var user_interactive_qos_attr: pthread_attr_t
    ^

这很有帮助,你可以很明显地看到我哪里出错了。但是当我尝试将user_interactive_qos_attr初始设置为nil时,我得到以下错误:

Playground execution failed: /var/folders/fv/m8h6cz5n7xx7bwb7qxppx2qc0000gn/T/./lldb/29864/playground8.swift:11:49: error: nil cannot initialize specified type 'pthread_attr_t' (aka '_opaque_pthread_attr_t')
var user_interactive_qos_attr: pthread_attr_t = nil
                                                ^

然后我转向可选选项。这消除了所有编译器错误,但当试图打开可选的nil时发生了运行时错误。

我做错了什么吗?或者Swift 2中不完全支持pthreads ?

如果有更熟悉pthreads/Swift的人可以仔细检查:

这似乎工作完美:

var return_value: Int32 = 0
var user_interactive_thread = pthread_t()
var user_interactive_qos_attr = pthread_attr_t()
return_value = pthread_attr_init(&user_interactive_qos_attr)
return_value = pthread_attr_set_qos_class_np(&user_interactive_qos_attr, QOS_CLASS_USER_INTERACTIVE, 0)
return_value = pthread_create(&user_interactive_thread, &user_interactive_qos_attr, { (x:UnsafeMutablePointer<Void>) in
    print("User interactive pthread")
    return nil
}, nil)

有或没有return_value明显

它似乎不应该工作。我好像欺骗了初始化器

最新更新