Module xwos.cthd

XWLUA模块:当前线程

操作线程自己的方法集合

Functions

sp () 返回当前线程的 线程对象强指针 thdsp
sleep (xwtm) 当前线程睡眠一段时间
sleep_to (to) 当前线程睡眠到一个时间点
sleep_from (origin, inc) 当前线程从一个时间起点睡眠到另一个时间点
yield () 通知调度器重新选择线程
exit (rc) 退出当前线程
shld_stop () 判断当前线程能否退出
frz_shld_stop () 判断当前线程是否可被冻结,如果是,就冻结线程,之后再判断线程是否可以退出
shld_frz () 判断当前线程是否可被冻结
frz () 冻结当前线程


Functions

sp ()
返回当前线程的 线程对象强指针 thdsp

Returns:

    userdata 当前线程的 线程对象强指针 thdsp

Usage:

  • me = xwos.cthd.sp()
  • 终端输出:
    > me = xwos.cthd.sp()
    > me
    {0x20000660, 67}
sleep (xwtm)
当前线程睡眠一段时间

调用此函数的线程会睡眠 xwtm ,线程会在 当前时间点 + xwtm 时被唤醒。

Parameters:

  • xwtm number (in) 需要睡眠的时间

Returns:

    number 错误码
     ● 0 没有错误
     ● -EINTR 睡眠过程被中断
     ● -ETIMEDOUT 输入的时间为负数

Usage:

    rc = xwos.cthd.sleep(xwtm.s(1)) -- 睡眠1s
sleep_to (to)
当前线程睡眠到一个时间点

Parameters:

  • to number (in) 期望唤醒的时间点

Returns:

    number 错误码
     ● 0 没有错误
     ● -EINTR 睡眠过程被中断
     ● -ETIMEDOUT 输入的时间为负数

Usage:

    rc = xwos.cthd.sleep_to(xwtm.ft(xwtm.s(1))) -- 从现在开始1s后唤醒
sleep_from (origin, inc)
当前线程从一个时间起点睡眠到另一个时间点

第一次调用此方法时,需要确定一个时间起点,可以通过 xwtm.now() 获取当前CPU调度器的系统时间。

此方法每次返回时都会将当前的系统时间返回,可以用作下一次调用的时间起点 origin 。 若时间增量 inc 保持不变,不断循环调用此方法,可形成较精确的周期性唤醒。

Parameters:

  • origin number (in) 时间起点
  • inc number (in) 期望被唤醒的时间相对于起点的增量,单位:纳秒

Returns:

  1. number 错误码
     ● 0 没有错误
     ● -EINTR 睡眠过程被中断
  2. userdata 下一次调用的时间起点

Usage:

    origin = xwos.skd.tt()
    cnt = 30 -- 重复30次
    repeat
      rc, origin = xwos.cthd.sleep_from(origin, xwtm.s(1)) -- 周期性每1s唤醒一次
      cnt = cnt - 1
    until (cnt == 0)
yield ()
通知调度器重新选择线程

Usage:

    xwos.cthd.yield()
exit (rc)
退出当前线程

Parameters:

  • rc number (in) 线程退出时的返回值

Usage:

    xwos.cthd.exit(0) -- 线程退出时抛出返回值0
shld_stop ()
判断当前线程能否退出

Returns:

    boolean 当前线程能否退出

Usage:

    repeat
      threadLoop() -- 线程的功能逻辑
      shldstop = xwos.cthd.shld_stop()
    until (shldstop)
frz_shld_stop ()
判断当前线程是否可被冻结,如果是,就冻结线程,之后再判断线程是否可以退出

Returns:

  1. boolean 当前线程能否退出
  2. boolean 当前线程是否被冻结过

Usage:

    repeat
      threadLoop() -- 线程的功能逻辑
      shldstop, froze = xwos.cthd.frz_shld_stop()
    until (shldstop)
shld_frz ()
判断当前线程是否可被冻结

Returns:

    boolean 是否可冻结当前线程

Usage:

    repeat
      if (xwos.cthd.shld_frz()) then
        clean_before_freezing() -- 冻结前清理资源
        xwos.cthd.frz() -- 冻结
        setup_after_frozen() -- 解冻后重新获取资源
      end
      threadLoop() -- 线程的功能逻辑
      shldstop = xwos.cthd.shld_stop()
    until (shldstop)
frz ()
冻结当前线程

Returns:

    number 错误码
     ● 0 没有错误
     ● -EPERM 当前不需要冻结线程
     ● -EINVAL 线程不是 Joinable

Usage:

    repeat
      if (xwos.cthd.shld_frz()) then
        clean_before_freezing() -- 冻结前清理资源
        xwos.cthd.frz() -- 冻结
        setup_after_frozen() -- 解冻后重新获取资源
      end
      threadLoop() -- 线程的功能逻辑
      shldstop = xwos.cthd.shld_stop()
    until (shldstop)
generated by LDoc 1.5.0 Last updated 2024-12-17 12:17:46