从Swift5.3版调用C函数:使用pthreads

EDIT3:从 RDerik 的代码中重新创建错误

我最初是从我从 RDerik 修改的代码开始的。现在,其他人可能会重新创建错误,我正在运行从这里克隆的 RDerik 中未经修改的代码。

当我运行 RDerik 的代码时,我收到以下错误(我在编辑中记录的相同错误:下面):

错误:可选类型“pthread_t?”的值 (又名“可选”)必须解包为“pthread_t”类型的值(又名“UInt”)

注意:!如果可选值包含,则强制解包用于中止执行nil

错误:无法转换“(UnsafeMutableRawPointer) -> UnsafeMutableRawPointer?”类型的值 到预期的参数类型 '@convention(c) (UnsafeMutableRawPointer?) -> UnsafeMutableRawPointer?' let result = pthread_create(&myThread, nil, threadedFunction, pThreadParameter)

我通过将函数头更改threadedFunction()为:

func threadedFunction(pointer: UnsafeMutableRawPointer!) -> UnsafeMutableRawPointer? 

原帖:

我知道之前已经回答过这个问题,但我一直无法找到与 Swift 5.3 兼容的修复程序。我需要调用的 C 函数具有以下签名:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)

下面的第 5 行是我 Swift 尝试调用pthread_create(). 具体来说,我的问题是第一个参数:&myThread.

我的代码:(从这里修改)

var myThread: pthread_t! = nil
var threadParameter  = _ThreadParameter(threadIdentifier: _ThreadIdentifier(id: ""), pxT: self)
var pThreadParameter = UnsafeMutablePointer<_ThreadParameter>.allocate(capacity:1)
pThreadParameter.pointee = threadParameter
let result = pthread_create(&myThread, nil, __threadedFunction, pThreadParameter)

错误:

调用 pthread_create 时,myThread 参数会引发以下错误:致命错误:在隐式解包可选值时意外发现 nil,第 5 行

编辑:

我尝试过的其他事情:

如果我像这样使用 a?而不是!pthread:

    var myThread: pthread_t? = nil

我收到编译错误:

错误:可选类型“pthread_t?”的值 (又名“可选”)必须解包为“pthread_t”类型的值(又名“UInt”)

注意:使用 '!' 强制解包 如果可选值包含“nil”则中止执行

编辑2:

还试过:

    let result = pthread_create(&myThread, 0, __threadedFunction, pThreadParameter)

错误:无法将“Int”类型的值转换为预期的参数类型“UnsafePointer<pthread_attr_t>?”

以上是从Swift5.3版调用C函数:使用pthreads的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>