大佬教程收集整理的这篇文章主要介绍了从 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,请注明来意。