|
今天刚刚学习了一种写法,想实验下多线程效果,然后打开易语言,新建易语言模块,在启动子程序里使用启动线程命令会有异常发生
|
快速生成索引文件 | 双精度小数型 | | |
文件路径 | 文本型 | | | | 最大索引 | 双精度小数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 文件号 | 整数型 | | | 线程数 | 整数型 | | | 块值 | 整数型 | | | 余数 | 双精度小数型 | | | i | 整数型 | | |
文件号 = 文件_打开文件A (文件路径, , , #CREATE_ALWAYS )线程数 = 10 块值 = 绝对取整 (最大索引 ÷ 线程数 )余数 = 绝对取整 (最大索引 % 线程数 )集_线程池. 创建 (线程数, 线程数, , , )计次循环首 (线程数, i )集_队列. 压入文本 (“第” + 到文本 (i ) + “次的文本”)如果真 (集_线程池. 投递任务 (&子程序1, i, 块值 ) = 假)调试输出 (i )计次循环尾 ()判断循环首 (集_线程池. 取_是否空闲 () = 假)程序_延时 (100 )判断循环尾 ()集_线程池. 销毁 ()文件_关闭文件 (文件号 )调试输出 (“执行完毕”)程序_延时 (1000 )返回 (0 )集_队列. 弹出文本 (文本 )调试输出 (i, 块值, 文本 )
具体的功能代码还没写,只是启动线程,然后调试输出索引,发现了一些错误
* 1 | 999 | “第1次的文本”
* 10 | 999 | “第2次的文本”
* 8 | 999 | “第3次的文本”
* 2 | 999 | “第10次的文本”
* 6 | 999 | “第6次的文本”
* 9 | 999 | “第8次的文本”
* 4 | 999 | “第5次的文本”
* 4 | 999 | “第5次的文本”
* 7 | 999 | “第7次的文本”
* “执行完毕”
被调试易程序运行完毕
通过调试看到了,预计是启动10条线程,索引虽然是乱序的,但是应该有1-10完整的序号,输出的索引却有两个“4”,并且少了一条线程
多次运行调试,有时候正常,有时候输出线程数量少了N条,有时候线程数量不少,但是索引重复
以为是循环过程 投递线程()这里投递失败,但是输出都是投递成功,且投递数量为预计的10个
并且测试了多种投递线程的函数,核心库、api、鱼刺的都测试过,都会存在这个问题。
这个问题目前新建窗口程序中使用不会出现,在易语言新建模块开发中会出现,目前用的易语言版本是5.6版本
是所有版本都会出现还是这个版本的问题
|
|