THREADDETACH
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgThreadDetach
- 最后更新: 2021-09-04
释放线程句柄而无需等待线程完成
语法
Declare Sub ThreadDetach ( Byval id As Any Ptr )用法
#include "fbthread.bi"
ThreadDetach( id )参数
id
由 ThreadCreate 或 ThreadCall 创建的线程的 Any Ptr 句柄
说明
ThreadDetach 释放与 ThreadCreate 或 ThreadCall 返回的线程句柄相关联的资源。线程句柄将被 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 ) )
Sleepend GeSHi
方言差异
- 在 -lang qb 方言中不允许使用线程。
平台差异
- ThreadDetach 在 FreeBASIC 的 DOS 版本中不可用,因为 DOS 内核及所用的扩展器不支持多线程。
与QB的区别
- FreeBASIC 新增
参见
ThreadWaitThreadCreate
返回 目录