Skip to content

THREADDETACH


释放线程句柄而无需等待线程完成

语法

Declare Sub ThreadDetach ( Byval id As Any Ptr )

用法

#include "fbthread.bi"
ThreadDetach( id )

参数

id

ThreadCreateThreadCall 创建的线程的 Any Ptr 句柄

说明

ThreadDetach 释放与 ThreadCreateThreadCall 返回的线程句柄相关联的资源。线程句柄将被 ThreadDetach 销毁,之后不能再使用。

ThreadWait 不同,ThreadDetach 不等待线程完成,线程将继续独立执行。线程退出后,所有已分配的资源将被释放。

为了避免内存泄漏,安全结束线程的方法是始终向线程发出必须结束的信号,然后对该线程调用 ThreadWait,除非之前已调用了 ThreadDetach。

注意:由于 ThreadDetach 会销毁线程句柄,ThreadWait 将无法再检查线程是否结束,甚至使用 ThreadWait 的行为也会变得不可预测(可能导致程序崩溃)。ThreadWait 和 ThreadDetach 的使用必须互斥。

但是,互斥锁和条件变量也可以用于已分离的线程。

示例

start GeSHi

vb
#include "fbthread.bi"

Sub mythread( ByVal param As Any Ptr )
    Print "hi!"
End Sub

Dim As Any Ptr thread = ThreadCreate( @mythread )
ThreadDetach( thread )
'' or
ThreadDetach( ThreadCreate( @mythread ) )

Sleep

end GeSHi

方言差异

  • -lang qb 方言中不允许使用线程。

平台差异

  • ThreadDetach 在 FreeBASIC 的 DOS 版本中不可用,因为 DOS 内核及所用的扩展器不支持多线程。

与QB的区别

  • FreeBASIC 新增

参见

  • ThreadWait
  • ThreadCreate

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系