huanhai 发表于 6 天前

启动线程_多参数带回调

<火山程序 类型 = "通常" 版本 = 1 />

类 自用线程 <公开 折叠>
{
    方法 启动线程_多参数 <公开 @嵌入式方法 = "" @视窗.外部头文件 = "<thread>">
    参数 编号 <类型 = 整数 @默认值 = 0>
    参数 内容 <类型 = 文本型 @默认值 = "">
    参数 数值 <类型 = 小数 @默认值 = 0>
    {
      @ auto pThis = &@sn<this>;
      @ int id = @<编号>;
      @ CVolString content = @<内容>;
      @ double num = @<数值>;
      @ std::thread(() mutable {
      @   pThis->@n<线程回调_多参数>(id, content, num);

      @ }).detach();
    }

    方法 线程回调_多参数 <公开 定义事件 类型 = 整数>
    参数 编号 <类型 = 整数>
    参数 内容 <类型 = 文本型>
    参数 数值 <类型 = 小数>
    {

    }
}



使用例子
<火山程序 类型 = "通常" 版本 = 1 />

变量 停止标志 <类型 = 逻辑型 值 = 假>

方法 按钮_被单击 <接收事件 类型 = 整数 注释 = "当按钮被单击后发送此事件" 折叠>
参数 来源对象 <类型 = 按钮 注释 = "提供事件产生的具体来源对象">
参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
{
    如果 (来源对象 == 按钮1)
    {
      编辑框1.内容 = ""
      停止标志 = 假

      // 启动线程
      线程.启动线程_多参数 (123, "测试消息", 3.14)

      编辑框1.内容 = 编辑框1.内容 + "任务在后台执行中...\r\n"
    }
    否则 (来源对象 == 按钮投递)
    {
      停止标志 = 真
      编辑框1.内容 = 编辑框1.内容 + "已发送停止信号\r\n"
    }


    返回 (0)
}

方法 自用线程_线程回调_多参数 <接收事件 类型 = 整数 折叠>
参数 来源对象 <类型 = 自用线程 注释 = "提供事件产生的具体来源对象">
参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
参数 编号 <类型 = 整数>
参数 内容 <类型 = 文本型>
参数 数值 <类型 = 小数>
{
    如果 (来源对象 == 线程)
    {


      变量 i <类型 = 整数>
      调试输出 ("【线程开始】编号: " + 到文本 (编号) + " 内容: " + 内容)

      计次循环 (10)
      {
            如果 (停止标志)
            {
                调试输出 ("【线程中断】收到停止信号")
                跳出循环
            }

            i = 取循环索引 ()
            调试输出 ("执行中... " + 到文本 (i) + "/10")
            @ Sleep(500);
      }

      调试输出 ("【线程结束】")




    }
    返回 (0)
}

jcos 发表于 6 天前

666超牛

多线程加线程池,这样多参的话,更实用哦

4731803 发表于 6 天前

这个是模块吗?

huanhai 发表于 6 天前

4731803 发表于 2025-12-25 16:06
这个是模块吗?

自己复制到火山使用

4731803 发表于 6 天前

huanhai 发表于 2025-12-25 16:25
自己复制到火山使用

哦 那行谢了
页: [1]
查看完整版本: 启动线程_多参数带回调