# 多线程

通过多线程 ,可以同步 执行多个任务 此多线程 采用java 线程机制,和lua协程有本质区别

线程间不共享数据,所有变量函数都单独存在


# 启动多线程

语法 runThread("lua文件名称,不带.lua后缀")

参数 : 为单独的lua文件,该文件会运行在单独的线程中

多线程启动后会返回一个 线程标识,该标识可以用于其他函数操作

注意:当主线程(mian.lua)运行结束后,所有子线程也会被回收

   local b = runThread("b")  -- 这里的b 是真实存在的 b.lua 文件
   print(b); --返回值为启动线程后 回馈的 线程标识
1
2

# 停止线程

语法 stopThread("启动线程后返回的标识")

参数 : 为单独的lua文件,该文件会运行在单独的线程中

   stopThread(x)  -- x一定是 “local x = runThread()” 函数返回的结果
1

# 线程间通信

线程间的变量 互不干涉,因此需要交换数据时,可采用以下方法

  1. 本地存储 save,get 函数
  2. 粘贴板函数
  3. getThread() 函数

# 获取指定线程 中的变量值

语法 getThread(线程标识,"变量名称")

    local b线程 = runThread("b") -- 这里的b 是真实存在的 b.lua 文件
    sleep(500) -- 延迟500毫秒,等待子线程运行
    bc =  getThread(b线程,"bc"); -- 获取b线程 中的 bc 变量值
    print(c)

1
2
3
4
5

# 调用 子线程中的方法

语法 callThreadFun(线程标识,"方法名称",参数,返回值数量)

  • 参数 和返回值 目前 支持 string boolean number nil 类型
  • 如果需要传递table 类型 ,可以用 jsonEncode 转换为string 传递
   local a =  runThread("a") -- 这里的a 是真实存在的 a.lua 文件
   sleep(1000) -- 等待子线程加载完毕所有函数
   local c,b = callThreadFun(a,"ac",123,2);-- 调用 a线程中的 ‘ac’ 方法 并把123 传递给 ac函数 ,并且ac 函数需要返回两个参数
   print(c..' '..b)

   sleep(1000)
1
2
3
4
5
6