递归火山软件开发平台

标题: 关于多线程问题 看看我这样写可以不 [打印本页]

作者: 862365673    时间: 半小时前
标题: 关于多线程问题 看看我这样写可以不
<火山程序 类型 = "通常" 版本 = 1 />

方法 线程池类_对象任务回调 <接收事件 类型 = 整数 注释 = "  线程池\"投递对象\"的回调函数,请在本事件内写线程方法." 注释 = "传入的用户对象会在本次任务结束后自动释放."
        返回值注释 = "返回值无意义" 折叠>
参数 来源对象 <类型 = 线程池类 注释 = "提供事件产生的具体来源对象">
参数 标记值 <类型 = 整数 注释 = "用户调用\"挂接事件\"命令时所提供的\"标记值\"参数值,非此方式挂接事件则本参数值固定为0.">
参数 用户标记 <类型 = 整数 注释 = "用户自定义标记值,建议用来区分线程的用途.">
参数 用户对象 <类型 = 对象类 注释 = "  用户投递的自定义对象,请自行强制到原来的对象类型再使用,如:" 注释 = "  1. 对象变量 = (自定义对象)用户对象"
        注释 = "  2. ((自定义对象)用户对象).成员" 注释 = "  方法1会将用户对象强制转换类型后复制到新变量,这会略增加内存的占用;"
        注释 = "  方法2不会创建新的对象实例,但写起来比较麻烦.">
参数 用户数据 <类型 = 变整数 注释 = "如果是指针且以后不再使用的话,建议在本事件结束前释放掉,以避免内存泄漏.">
{
    如果 (来源对象 == 线程池)
    {
        如果 (用户标记 == 0)
        {
            循环写 ("测试:")
        }
        如果 (用户标记 == 1)
        {
            循环读 ()

        }

    }
    返回 (0)
}

方法 循环写 <折叠>
参数 参_文本 <类型 = 文本型>
{
    变量 计次 <类型 = 整数 值 = 1>
    写_是否退出 (假)
    判断循环 (线程池.是否需要退出 () == 假)
    {
        计次 = 计次 + 1
        置_数据文本 (参_文本 + 到文本 (计次))
        如果 (线程池.执行任务数 >= 1)
        {
            写_是否退出 (真)
        }
        如果 (线程池.执行任务数 == 0)
        {
            写_是否退出 (假)
            线程池.投递对象 (1, )
        }
        延时 (取随机数 (1, 5))

    }
    写_是否退出 (真)
    调试输出 ("退出")
}

方法 循环读 <折叠>
{
    判断循环 (读_是否退出 () == 假)
    {
        如果 (读_是否退出 () == 真)
        {
            调试输出 (取_数据文本 (), "1")
            跳出循环
        }
        如果 (读_是否退出 () == 真)
        {
            调试输出 (取_数据文本 (), "2")
            跳出循环
        }
        如果 (读_是否退出 () == 真)
        {
            调试输出 (取_数据文本 (), "3")
            跳出循环
        }
        如果 (读_是否退出 () == 真)
        {
            调试输出 (取_数据文本 (), "4")
            跳出循环
        }
        如果 (读_是否退出 () == 真)
        {
            调试输出 (取_数据文本 (), "5")
            跳出循环
        }
        如果 (读_是否退出 () == 真)
        {
            调试输出 (取_数据文本 (), "6")
            跳出循环
        }
    }
    调试输出 (取_数据文本 () + "循环读退出")

}

方法 写_是否退出 <折叠>
参数 判断 <类型 = 逻辑型>
{
    线程_判断锁.互斥自动锁 ()
    线程_判断 = 判断
}

方法 读_是否退出 <类型 = 逻辑型 折叠>
{
    线程_判断锁.互斥自动锁 ()
    返回 (线程_判断)
}

方法 置_数据文本 <折叠>
参数 文本 <类型 = 文本型>
{
    文本锁.互斥自动锁 ()
    成员_文本 = 文本
}

方法 取_数据文本 <类型 = 文本型>
{
    文本锁.互斥自动锁 ()
    返回 (成员_文本)

}







欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4