程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从 Swift 5.3 版调用 C 函数:使用 pthreads大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从 Swift 5.3 版调用 C 函数:使用 pthreads?

开发过程中遇到从 Swift 5.3 版调用 C 函数:使用 pthreads的问题如何解决?下面主要结合日常开发的经验,给出你关于从 Swift 5.3 版调用 C 函数:使用 pthreads的解决方法建议,希望对你解决从 Swift 5.3 版调用 C 函数:使用 pthreads有所启发或帮助;

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

我最初是从我从 RDerik 修改的代码开始的。现在,其他人可能会重新创建错误,我正在运行从 here 克隆的 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 行是我调用 pthread_create() 的 Swift 尝试。具体来说,我的问题是第一个参数:&myThread

我的代码:(修改自 here)

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,__threadedFunction,pThreadParameter)

错误:

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

编辑:

我尝试过的其他事情:

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

    var myThread: pthread_t? = nil

我收到编译错误:

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

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

EDIT2:

也试过了:

    let result = pthread_create(&myThread,pThreadParameter)

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

解决方法

我不知道迅速。然而对应于 NIL 在 c.NULL 中是 NULL 又是一个宏,这取决于编译器。所以它可以定义为 #define NULL ((char *)0) 或简单的 #define NULL 0。那么如果传递 pthread_create(&myThread,... 而不是 nil 会发生什么?

大佬总结

以上是大佬教程为你收集整理的从 Swift 5.3 版调用 C 函数:使用 pthreads全部内容,希望文章能够帮你解决从 Swift 5.3 版调用 C 函数:使用 pthreads所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。