|
分享例程
界面截图: |
|
备注说明: |
- |
本帖最后由 guoqp 于 2013-4-7 17:00 编辑
E-APPLE线程池 2.2 使用说明
使用本线程池前请先建立一个变量,并将其类型设为“E_APPLE线程池”,下述说明将假设本线程池变量为E。
一、线程池的创建与销毁
1、创建
E.创建(10,0)
说明:本方法两个参数
参数一:线程池容量,也就是本线程池最大允许加入多少个线程
参数二:超时时间,允许为空,默认为0,表示不设置超时时间。单位:秒。不过请注意,如果不配置超时时间,而你的线程处理不当导致一直驻留线程池,这样可能会导致线程池中一直被使用而无法加入新的线程。至
于这个超时时间建议根据线程实际运行时间的最大值来设定。
2、销毁
E.清空(真)
说明:本方法有一个参数,默认为假,若本参数为真则强制结束池内所有进程并销毁本线程池。若本参数为假会一直等待所有进程运行结束后再销毁本线程池,注意,这时会无限等待,直到所有线程结束,如果你的线
程不能正常结束可能会导致死锁哦。
二、加入线程
E.添加任务(&子程序,子程序参数指针,&获取自身索引子程序指针)
说明:三个参数
参数一:线程函数指针
参数二:线程函数参数指针。使用“取指针地址(变量)”获取,这个指针地址也就是欲传递给线程的参数,一般为自定义类型。
参数三:本子程序指针用于将线程索引号传给自定义变量
任务创建成功会返回索引号
下边举例说明如何向线程传入参数:
1、自定义一个类型,成员多少就看你想传入多少个参数了
2、定义一个变量,类型为步骤1的这个自定义类型
3、获取这个变量地址:取指针地址(变量),这个就是参数二需要的。
下边说说在线程内如何将这个参数还原以供自己使用。
1、定义一个变量,类型为刚刚我们建的那个自定义类型(假设线程参数名为参数指针,定义的这个变量为线程参数)
2、API_变量内存拷贝 (取指针地址 (线程参数), 参数指针, API_取变量尺寸 (参数指针))
3、现在变量线程参数就已经是可以直接使用的了。
三、看看线程池中情况
E.任务统计(0,返回结果数组)
说明:两个参数
参数一:欲统计的任务状态。默认为0,值:0包括运行中与挂起两种状态,1为运行状态,2为挂起状态
参数二:一个数组,用于返回所有结果对应的索引号,这样就方便对这些线程进行各种操作了。
四、看看线程池用完了没有
E.分配任务索引()
说明:如果没有找到空闲的,则返回0,否则返回第一个空闲的索引
五、我想看看某个任务线程是否已经结束
E.等待任务(任务索引,等待时间,是否清除)
说明:三个参数
参数一:欲操作的任务索引号
参数二:等待时间,单位:毫秒,如果在这段时间内线程运行结束则返回真,否则返回假。
参数三:是否清除,如果为真,超过等待时间未结束的线程会强制结束掉并释放其占用的线程池。
六、我想禁止或允许线程池加入新的线程
E.启动()
E.停止()
七、我想让某个线程独占内存
E.锁定()
说明:准备锁定前用
E.解锁()
说明:准备解锁时用
八、我想挂起或者恢复某个任务线程
E.暂停任务(索引号)
E.恢复任务(索引号)
说明:参数“索引号”为线程池中对应的索引号
九、我想重新定义一下线程池容量
E.重置线程池容量(10)
说明:参数为新的容量,注意配置的新容量不能低于线程池中正在运行及挂起的线程总数,否则重置会失败。
其实细心的朋友可能已经发现这里边有个问题,就是在线程内部怎么知道自己处在哪个索引呢,按照下边的方法就可以了
1、定义一个子程序,两个参数,均为整数。
说明:
参数一为传入线程参数变量地址(本处假设为“参数指针”),这个地址就是我们传给线程时用的那个参数地址。
参数二为索引号(本处假设为“索引号”),这个参数是在线程池内部传出来的。
2、在子程序内部定义一个变量,类型为你自定义的类型,这里一定要注意一点,你的自定义变量时一定要有一项用于存储线程索引,因为在这里我们会向这个成员写入索引号。
3、再加入如下代码,注意变量名称你稍作调整就行了。
API_变量内存拷贝 (取指针地址 (线程参数), 参数指针, API_取变量尺寸 (参数指针)) '将原参数传到内部进行处理
线程参数.线程索引 = 索引号 '
API_变量内存拷贝 (参数指针, 取指针地址 (线程参数), API_取变量尺寸 (参数指针)) '将我们处理好的变量传回去,这样我们的线程就可以使用了。
接下来最关键的来了,创建进程时加入第三个参数,就是这个处理子程序指针了。
下边贴上完整的代码:
.版本 2
.支持库 shellEx
.支持库 spec
.子程序 _临时子程序
.局部变量 线程参数, 线程参数测试
.局部变量 任务索引, 整数型
.局部变量 计次, 整数型
.局部变量 参数地址, 整数型
线程参数.文本 = “abc”
线程参数.整数 = 22
参数地址 = 取指针地址 (线程参数)
线程池.创建 (500, 10)
.计次循环首 (10000, 计次)
线程池.添加任务 (&线程子程序, 参数地址, &获取自身索引子程序指针)
.如果真 (计次 > 500)
线程池.清空 (真)
跳出循环 ()
.如果真结束
.计次循环尾 ()
线程池.清空 ()
.子程序 线程子程序
.参数 参数指针, 整数型
.局部变量 i, 整数型
.局部变量 线程参数, 线程参数测试
API_变量内存拷贝 (取指针地址 (线程参数), 参数指针, API_取变量尺寸 (参数指针))
调试输出 (线程参数.线程索引, 线程参数.整数)
延时 (100000)
.子程序 获取自身索引子程序指针
.参数 参数指针, 整数型
.参数 索引号, 整数型
.局部变量 线程参数, 线程参数测试
API_变量内存拷贝 (取指针地址 (线程参数), 参数指针, API_取变量尺寸 (参数指针))
线程参数.线程索引 = 索引号
API_变量内存拷贝 (参数指针, 取指针地址 (线程参数), API_取变量尺寸 (参数指针))
|
|