求问 多线程要怎么关闭
根据论坛的, 启动线程,采用了取文本指针()传递了参数,在E 里面有个 关闭线程句柄,请问火山这种 要怎么处理 ,不关闭 会有什么影响呢?<火山程序 类型 = "通常" 版本 = 1 />
xxd2 = 新代码 + "#" + 到文本 (d2) // 传递参数
pd2 = 取文本指针 (xxd2)
xxd1 = 新代码 + "#" + 到文本 (d1) // 传递参数
pd1 = 取文本指针 (xxd1)
启动线程 (获取数据2, pd2, , , )
延时 (50)
启动线程 (获取数据1, pd1, , , )
延时 (150)
一、启动线程内部已经写了关闭线程句柄,所以无需关闭句柄,线程执行完就会销毁;
但相应的,你也不能对线程句柄进行操作,但线程句柄的操作很多是不安全的,也没所谓了。
二、你传参局部变量的指针,在线程里会变成野指针的,这也是为什么你加了个延时。
建议申请内存,将数据复制到内存里,再在线程中调用并释放内存。
如果觉得比较麻烦,也可以用PIV模块的启动静态线程,支持传递任意类型和数量的参数,而且默认是按值拷贝参数的数据,不需要考虑句柄变量的问题。 Xelloss0618 发表于 2025-10-26 12:06
一、启动线程内部已经写了关闭线程句柄,所以无需关闭句柄,线程执行完就会销毁;
但相应的,你也不能对线 ...
哪种速度上更快一些 filippo009 发表于 2025-10-26 13:57
哪种速度上更快一些
性能差距在1微秒内,可以忽略不计了,哪个方便用哪个 Xelloss0618 发表于 2025-10-26 15:36
性能差距在1微秒内,可以忽略不计了,哪个方便用哪个
谢谢你,野指针容易丢包吗..是申请内存方式和 PIV模块相差不大的意思吧 ? filippo009 发表于 2025-10-26 20:17
谢谢你,野指针容易丢包吗..是申请内存方式和 PIV模块相差不大的意思吧 ?...
野指针的意思是指针原先指向的变量已经被销毁,现在的指针数据是不可靠的。
PIV模块里封装的是STL标准库的线程,和申请内存是有区别的,但都能实现功能,标准库的更强大一点,不限制参数类型和参数数量。 filippo009 发表于 2025-10-26 20:17
谢谢你,野指针容易丢包吗..是申请内存方式和 PIV模块相差不大的意思吧 ?...
刚我重新 加载了PIV 模块,重新试试了下,由于我运行完线程,要返回一个数据,之前返回数据用的 数组类 .加入成员,启动线程后不延迟, 会导致数组的数据错位,要用数组方式,必须加延时
另外,我不用数组方式,给每个线程返回单独定义了了个变量,可以不用延时... 速度目前无法测试,到底跟以前比哪个快... 主观感觉,跟e写的速度差不多.. 本帖最后由 Xelloss0618 于 2025-10-26 22:25 编辑
filippo009 发表于 2025-10-26 22:19
刚我重新 加载了PIV 模块,重新试试了下,由于我运行完线程,要返回一个数据,之前返回数据用的 数组类 . ...
你是在线程里加入成员到外部的成员/全局变量里?
那就应该加锁啊,用互斥锁。
速度就不用纠结了,创建线程本身耗时就有几毫秒,PIV和启动线程的速度差距是1微秒内,相比之下这点开销不值一提。
Xelloss0618 发表于 2025-10-26 22:23
你是在线程里加入成员到外部的成员/全局变量里?
那就应该加锁啊,用互斥锁。
速度就不用纠结了,创建线程 ...
我是线程处理完数据,然后得返回到全局变量里,,还要回去再加工处理..
加锁 的话 我后面试试..
.. 请教一下,哪种不耗内存..?
原来e里面写的也加了延迟,只是e只能支持32位,现在要到64位,改火山..
就当学习一种新的方法,谢谢你,我是半吊子,纯搞一点点数据自己用 filippo009 发表于 2025-10-26 22:39
我是线程处理完数据,然后得返回到全局变量里,,还要回去再加工处理..
加锁 的话 我后面试试..
.. 请教 ...
你加了延时,那肯定是最慢的。
就算是易语言,线程里操作全局变量也是靠加锁的。
你定义一个全局的互斥锁,然后无论是线程内部还是主线程,在操作全局变量之前都需要加锁,操作完也要立即解锁。
		页: 
[1] 
2