使用易语言过程中,因为利用到多线程,句柄数总是增加,时间久了难免会崩溃。句柄数过高怎么解决这个问题困扰了很久,但是一直没有找到有效办法,包括使用关闭线程句柄()命令都无法解决。
本文分两步解决句柄数过高的问题
1、要实现关闭,必须要解决的是线程句柄的传递。
2、利用队列,按序先进先出的关闭执行完毕的线程,来达到解决句柄数过高的问题。
易语言线程句柄如何传递到线程
首先我们要在线程启动时,把获取到的线程句柄传递给线程内,然后在线程执行完毕时,再把线程句柄传递给用来关闭的子线程,这样保证线程执行完毕才会被关闭。
1、引用DLL命令,启用API_复制内存(),可使用API_复制内存()的DLL命令来实现线程句柄的传递
.版本 2
.DLL命令 API_复制内存, , “kernel32”, “RtlMoveMemory”, , RtlMoveMemory
.参数 Destination, 整数型, 传址, 复制到此指针
.参数 Source, 整数型, , 被复制的指针
.参数 Length, 整数型, , 长度
2、启动线程时传递线程句柄给线程
线程句柄 = 线程_启动多参_文本型 (&方式一, 取变量地址 (线程句柄), t, , , , )
3、在线程内使用API_复制内存()获取到线程句柄
线程执行完毕后,利用队列来实现关闭线程句柄
这里使用队列可以按顺序依次关闭线程,避免出现意外的情况出现。
1、在队列任务中,把线程句柄利用线程池投递给结束任务
2、在结束任务中使用关闭句柄()来关闭主程序的线程句柄
通过测试发现,句柄数有效得到控制,只保留几个循环的线程的句柄数,软件的稳定性也进一步得到提升。本文使用的模块有精易模块,鱼刺多线程模块。
如需帮助请联系客服
原创文章,作者:阳光,如若转载,请注明出处:https://www.waoyou.com/507.html