gpt4 book ai didi

swift - 从 Swift 版本 5.3 : using pthreads 调用 C 函数

转载 作者:行者123 更新时间:2023-12-03 17:43:36 24 4
gpt4 key购买 nike

编辑3 : 从 RDerik 的代码中重新创建错误
我最初是从我从 RDerik 修改的代码开始的。现在,其他人可能会重新创建错误,我正在运行从 here 克隆的 RDerik 中未经修改的代码。 .
当我运行 RDerik 的代码时,我收到以下错误(我在编辑中记录的相同错误:下面):

error: value of optional type 'pthread_t?' (aka 'Optional') must be unwrapped to a value of type 'pthread_t' (aka 'UInt')


note: force-unwrap using ! to abort execution if the optional value contains nil


error: cannot convert value of type '(UnsafeMutableRawPointer) -> UnsafeMutableRawPointer?' to expected argument type '@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 .
我的代码:(从 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, nil, __threadedFunction, pThreadParameter)
错误:

When calling pthread_create the myThread parameter throws the following error:Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value, line 5


编辑:
我尝试过的其他事情:
如果我使用 ?而不是 !对于这样的 pthread:
    var myThread: pthread_t? = nil
我收到编译错误:

error: value of optional type 'pthread_t?' (aka 'Optional') must be unwrapped to a value of type 'pthread_t' (aka 'UInt')


note: force-unwrap using '!' to abort execution if the optional value contains 'nil'


编辑2:
还试过:
    let result = pthread_create(&myThread, 0, __threadedFunction, pThreadParameter)

ERROR: cannot convert value of type 'Int' to expected argument type 'UnsafePointer<pthread_attr_t>?'

最佳答案

我不知道 swift 。然而对应于NILNULL在 c. NULL又是一个宏,取决于编译器。所以它可以定义为 #define NULL ((char *)0)或者干脆 #define NULL 0 .那么如果你通过 pthread_create(&myThread, 0, ... 会发生什么?而不是零?

关于swift - 从 Swift 版本 5.3 : using pthreads 调用 C 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67679032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com