炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 189|回复: 0

[图文教程] ♦ 炫扩展模块 - 线程 - 炫::异步

[复制链接]
  • TA的每日心情
    闭嘴
    2024-4-8 11:56
  • 发表于 2024-2-25 14:26:58 | 显示全部楼层 |阅读模式
    本帖最后由 bestkakkoii 于 2024-2-25 15:05 编辑


    炫::异步

    基于 C++ 的 std::async配合 首参数 std::launch::async 来将指定函数置于新创建的线程中执行
    该类支持多参数传递至多可传9个自定义参数,并且支持获取线程函数的返回值
    此类与WINAPI的CreateThread或std::thread别无二致,
    优点在于
    不需要自己关闭线程句柄,
    也不需要特别维持线程变量存活,
    亦不需要特地使用全局函数

    可以轻松地使用线程

    缺点是
    无法像 C++20 的 std::jthread 掌控线程的状态

    只支持 __cdecl 调用约定

    公开函数:

    • 炫::任务结果<返回值类型> 炫::异步::执行(&全局函数, 其他参数[最多9个]...)

    异步执行一个全局函数

    • 炫::任务结果<返回值类型> 炫::异步::执行(&类名::函数名, &类实例变量, 其他参数[最多9个]...)

    异步执行一个指定类(已实例)中的公开成员函数


    返回值非必须,仅在需要求返回值、或同步等待线程结束的情况才使用

    使用方法:
    [C++] 纯文本查看 复制代码
    函数 整型 我是一个全局函数(int 数字){
            返回 数字;
    }
    类 我是一个类
    {
            函数 整型 準考證編號(常量 文本型 &名稱, 常量 文本型 &生日, 整型 號碼)
            {
                    炫打印() << 炫::取当前线程編號();
                    炫::延时(5000);
                    炫打印() << "名稱:" << 名稱 << "生日:" << 生日 << "號碼:" << 號碼;
                    返回 號碼;
            }
    }
    炫::异步 線程; //宣告一个全局的 炫::异步实例
    函数 整型 入口函数_窗口()
    {
            炫打印() << 炫::取当前线程編號();
            我是一个类 一个类;
            // 实际应该直接使用 炫::异步::执行(...) 但目前炫IDE不支持这种写法 所以我们需要事先宣告一个全局实例
            // 执行 类成员函数 "準考證編號" 并传入参数 类实例指针 和其他参数 "小明", "1900/01/01", 123456
            炫::任务结果<整型> 结果A = 線程.执行(&我是一个类::準考證編號, &一个类, "小明", "1900/01/01", 123456);
            结果A.等待至(10000)//最长等待10秒,或线程结束
            炫打印() << 结果A.取结果();
            炫::任务结果<整型> 结果B = 線程.执行(&我是一个全局函数, 123456);
            结果B.等待() //无限等待直到线程结束
            炫打印() << 结果B.取结果();
            返回 0;
    }




    使用任务管理器来管理多个线程:
    注意,任务结果管理器所管理的线程必须具有相同返回值
    [C++] 纯文本查看 复制代码
    函数 整型 我是一个全局函数(int 数字)
    {
            返回 数字;
    }
    类 我是一个类
    {
            函数 整型 準考證編號(常量 文本型 &名稱, 常量 文本型 &生日, 整型 號碼)
            {
                    炫::延时(5000);
                    炫打印() << "名稱:" << 名稱 << "生日:" << 生日 << "號碼:" << 號碼;
                    返回 號碼;
            }
    }
    炫::异步 線程; //宣告一个全局的 炫::异步实例
    函数 整型 入口函数_窗口()
    {
            //使用任务管理器来管理多个线程
            炫::任务结果管理器<整型> 管理器; //用于同时管理多个任务结果
            我是一个类 一个类;
            // 实际应该直接使用 炫::异步::执行(...) 但目前炫IDE不支持这种写法 所以我们需要事先宣告一个全局实例
            // 执行 类成员函数 "準考證編號" 并传入参数 类实例指针 和其他参数 "小明", "1900/01/01", 123456
            管理器.添加(線程.执行(&我是一个类::準考證編號, &一个类, "小明", "1900/01/01", 123456));
            管理器.添加(線程.执行(&我是一个全局函数, 123456));
            管理器.等待完成() //等待所有线程结束
            炫::vec<整型> 多个结果 = 管理器.取结果()
            炫打印() << 多个结果;
            返回 0;
    }








    评分

    参与人数 1炫彩币 +2 收起 理由
    dongou + 2 很给力!

    查看全部评分

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

    GMT+8, 2024-5-2 12:06 , Processed in 0.066053 second(s), 20 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表