递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 209|回复: 13
打印 上一主题 下一主题

[其它] 求问 多线程要怎么关闭

[复制链接]

3

主题

32

帖子

127

积分

注册会员

Rank: 2

积分
127
跳转到指定楼层
楼主
发表于 昨天 01:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
根据论坛的, 启动线程,采用了取文本指针()传递了参数,在E 里面有个 关闭线程句柄,请问火山这种 要怎么处理 ,不关闭 会有什么影响呢?


<火山程序 类型 = "通常" 版本 = 1 />
xxd2 = 新代码 + "#" + 到文本 (d2)                   // 传递参数
pd2 = 取文本指针 (xxd2)

xxd1 = 新代码 + "#" + 到文本 (d1)                  // 传递参数
pd1 = 取文本指针 (xxd1)

启动线程 (获取数据2, pd2, , , )
延时 (50)

启动线程 (获取数据1, pd1, , , )

延时 (150)


回复

使用道具 举报

29

主题

2598

帖子

9156

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9156
沙发
发表于 昨天 12:06 | 只看该作者
一、启动线程内部已经写了关闭线程句柄,所以无需关闭句柄,线程执行完就会销毁;
但相应的,你也不能对线程句柄进行操作,但线程句柄的操作很多是不安全的,也没所谓了。

二、你传参局部变量的指针,在线程里会变成野指针的,这也是为什么你加了个延时。
建议申请内存,将数据复制到内存里,再在线程中调用并释放内存。
如果觉得比较麻烦,也可以用PIV模块的启动静态线程,支持传递任意类型和数量的参数,而且默认是按值拷贝参数的数据,不需要考虑句柄变量的问题。
回复

使用道具 举报

3

主题

32

帖子

127

积分

注册会员

Rank: 2

积分
127
板凳
 楼主| 发表于 昨天 13:57 | 只看该作者
Xelloss0618 发表于 2025-10-26 12:06
一、启动线程内部已经写了关闭线程句柄,所以无需关闭句柄,线程执行完就会销毁;
但相应的,你也不能对线 ...

哪种速度上更快一些
回复

使用道具 举报

29

主题

2598

帖子

9156

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9156
地板
发表于 昨天 15:36 | 只看该作者
filippo009 发表于 2025-10-26 13:57
哪种速度上更快一些

性能差距在1微秒内,可以忽略不计了,哪个方便用哪个
回复

使用道具 举报

3

主题

32

帖子

127

积分

注册会员

Rank: 2

积分
127
5#
 楼主| 发表于 昨天 20:17 | 只看该作者
Xelloss0618 发表于 2025-10-26 15:36
性能差距在1微秒内,可以忽略不计了,哪个方便用哪个

谢谢你,  野指针容易丢包吗..是申请内存方式和 PIV模块相差不大的意思吧 ?
回复

使用道具 举报

29

主题

2598

帖子

9156

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9156
6#
发表于 昨天 22:03 | 只看该作者
filippo009 发表于 2025-10-26 20:17
谢谢你,  野指针容易丢包吗..是申请内存方式和 PIV模块相差不大的意思吧 ?  ...

野指针的意思是指针原先指向的变量已经被销毁,现在的指针数据是不可靠的。
PIV模块里封装的是STL标准库的线程,和申请内存是有区别的,但都能实现功能,标准库的更强大一点,不限制参数类型和参数数量。
回复

使用道具 举报

3

主题

32

帖子

127

积分

注册会员

Rank: 2

积分
127
7#
 楼主| 发表于 昨天 22:19 | 只看该作者
filippo009 发表于 2025-10-26 20:17
谢谢你,  野指针容易丢包吗..是申请内存方式和 PIV模块相差不大的意思吧 ?  ...

刚我重新 加载了PIV 模块,重新试试了下,由于我运行完线程,要返回一个数据,之前返回数据用的 数组类 .加入成员,启动线程后不延迟, 会导致数组的数据错位,要用数组方式,必须加延时
另外,我不用数组方式,给每个线程返回单独定义了了个变量,可以不用延时... 速度目前无法测试,到底跟以前比哪个快... 主观感觉,跟e写的速度差不多..
回复

使用道具 举报

29

主题

2598

帖子

9156

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9156
8#
发表于 昨天 22:23 | 只看该作者
本帖最后由 Xelloss0618 于 2025-10-26 22:25 编辑
filippo009 发表于 2025-10-26 22:19
刚我重新 加载了PIV 模块,重新试试了下,由于我运行完线程,要返回一个数据,之前返回数据用的 数组类 . ...

你是在线程里加入成员到外部的成员/全局变量里?
那就应该加锁啊,用互斥锁。
速度就不用纠结了,创建线程本身耗时就有几毫秒,PIV和启动线程的速度差距是1微秒内,相比之下这点开销不值一提。
回复

使用道具 举报

3

主题

32

帖子

127

积分

注册会员

Rank: 2

积分
127
9#
 楼主| 发表于 昨天 22:39 | 只看该作者
Xelloss0618 发表于 2025-10-26 22:23
你是在线程里加入成员到外部的成员/全局变量里?
那就应该加锁啊,用互斥锁。
速度就不用纠结了,创建线程 ...

我是线程处理完数据,然后得返回到全局变量里,,还要回去再加工处理..
加锁 的话 我后面试试..
.. 请教一下,哪种不耗内存..?

原来e里面写的也加了延迟,只是e只能支持32位,现在要到64位,改火山..
就当学习一种新的方法,谢谢你,我是半吊子,纯搞一点点数据自己用
回复

使用道具 举报

29

主题

2598

帖子

9156

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
9156
10#
发表于 昨天 23:11 | 只看该作者
filippo009 发表于 2025-10-26 22:39
我是线程处理完数据,然后得返回到全局变量里,,还要回去再加工处理..
加锁 的话 我后面试试..
.. 请教 ...

你加了延时,那肯定是最慢的。
就算是易语言,线程里操作全局变量也是靠加锁的。
你定义一个全局的互斥锁,然后无论是线程内部还是主线程,在操作全局变量之前都需要加锁,操作完也要立即解锁。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-10-27 15:45 , Processed in 0.094255 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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