|

5精币
单窗口两个线程,一个全局变量数组,全局变量是自定义数据类型的,里面有整数型,逻辑型,文本型,小数型数据。
一个线程专门对窗口进行操作,另一个线程监测窗口的各种数据变化。
这样的话副线程在监测数据变化的时候,会将数据写入全局变量,主线程专门读取这个变量,有必要加许可证吗?
目前开启了一个窗口测试,发现不加许可证没什么问题,一般崩溃基本都是指针改变导致的,但是对于整数型等数据来说,一般指针不会变化,也就文本型需要处理一下吧。
那么如果一个全局变量,一个线程读取,一个线程写入数据,不加许可证应该不会冲突吧,如果不加许可证,可能会导致什么问题?
全局变量的数组的每个数之间的读写需要加许可证隔开吗?对于多线程这块不是很熟悉,希望各位赐教
补充内容 (2019-4-20 09:32):
.版本 2
.支持库 iext
按钮_开始激活.禁止 = 真
按钮_开始激活.标题 = “正在激活...”
超级列表框1.全部删除 ()
.如果真 (文件是否存在 (编辑框_已激活.内容) = 假)
文件_创建 (编辑框_已激活.内容, 0)
.如果真结束
.如果真 (文件是否存在 (编辑框_激活失败.内容) = 假)
文件_创建 (编辑框_激活失败.内容, 0)
.如果真结束
写配置项 (取运行目录 () + “\激活器配置文件.ini”, “激活模式”, “是否切IP激活”, 到文本 (选择框_是否切IP.选中))
写配置项 (取运行目录 () + “\激活器配置文件.ini”, “激活模式”, “每批激活数量”, 编辑框_每批数量.内容)
线程锁 = 线程_创建许可证 ()
方法锁 = 线程_创建许可证 ()
线程_启动 (&主程序)
补充内容 (2019-4-20 09:32):
.版本 2
.支持库 iext
已zc账号文本号 = 打开文件 (编辑框_已zc.内容, , )
当前未激活账号 = 分割文本 (读入文本 (已zc账号文本号, ), #换行符, )
关闭文件 (已zc账号文本号)
未激活账号数量 = 取数组成员数 (当前未激活账号)
.判断开始 (选择框_是否切IP.选中 = 假)
每批激活数量 = 未激活账号数量
.默认
每批激活数量 = 到整数 (编辑框_每批数量.内容)
.判断结束
透明标签6.标题 = “当前剩余账号:” + 到文本 (未激活账号数量) + “个”
当前批次 = 0
.判断循环首 (未激活账号数量 > 0)
.如果真 (未激活账号数量 < 每批激活数量)
每批激活数量 = 未激活账号数量
.如果真结束
当前激活进度 = 1
重定义数组 (账号信息, 假, 每批激活数量)
循环次数 = 0
.计次循环首 (每批激活数量, 循环次数)
账号信息 [循环次数].当前序号 = 循环次数 + 当前批次 × 到整数 (编辑框_每批数量.内容)
当前账号数据 = 分割文本 (当前未激活账号 [账号信息 [循环次数].当前序号], “----”, )
账号信息 [循环次数].邮箱账号 = 取空白文本 (100)
账号信息 [循环次数].邮箱密码 = 取空白文本 (100)
账号信息 [循环次数].激活链接 = 取空白文本 (100)
账号信息 [循环次数].激活状态 = 取空白文本 (100)
.判断开始 (取数组成员数 (当前账号数据) > 1)
账号信息 [循环次数].邮箱账号 = 当前账号数据 [1]
账号信息 [循环次数].邮箱密码 = 当前账号数据 [2]
账号信息 [循环次数].激活状态 = “”
.默认
账号信息 [循环次数].邮箱账号 = 当前未激活账号 [循环次数 + 当前批次 × 到整数 (编辑框_每批数量.内容)]
账号信息 [循环次数].邮箱密码 = “”
账号信息 [循环次数].激活状态 = “账号信息错误”
.判断结束
账号信息 [循环次数].激活链接 = “”
.计次循环尾 ()
循环次数 = 0
.计次循环首 (每批激活数量, 循环次数)
透明标签7.标题 = “正在载入” + 到文本 (循环次数) + “/” + 到文本 (每批激活数量) + “个数据...”
线程_进入许可区 (线程锁)
局_索引 = 超级列表框1.插入表项 (账号信息 [循环次数].当前序号, , , , , )
超级列表框1.置标题 (局_索引, 1, 到文本 (账号信息 [循环次数].当前序号))
超级列表框1.置标题 (局_索引, 2, 账号信息 [循环次数].邮箱账号)
超级列表框1.保证显示 (局_索引)
线程_退出许可区 (线程锁)
线程_启动 (&激活账号, 循环次数)
延时 (50)
未激活账号数量 = 未激活账号数量 - 1
.计次循环尾 ()
透明标签7.标题 = “当前” + 到文本 (每批激活数量) + “个数据载入完毕!”
.判断循环首 (当前激活进度 ≤ 每批激活数量)
透明标签8.标题 = “正在激活第” + 到文本 (当前激活进度) + “/” + 到文本 (每批激活数量) + “个数据...”
延时 (200)
透明标签6.标题 = “当前剩余账号:” + 到文本 (未激活账号数量) + “个”
.判断循环尾 ()
透明标签8.标题 = “当前” + 到文本 (每批激活数量) + “个数据激活完毕!”
.如果真 (未激活账号数量 > 0)
切换IP地址 ()
.如果真结束
当前批次 = 当前批次 + 1
透明标签8.标题 = “”
.判断循环尾 ()
.判断循环首 (当前激活进度 ≤ 每批激活数量)
透明标签8.标题 = “正在激活第” + 到文本 (当前激活进度) + “/” + 到文本 (每批激活数量) + “个数据...”
延时 (200)
透明标签6.标题 = “当前剩余账号:” + 到文本 (未激活账号数量) + “个”
.判断循环尾 ()
按钮_开始激活.禁止 = 假
按钮_开始激活.标题 = “开始激活账号”
补充内容 (2019-4-20 09:32):
.版本 2
.支持库 spec
.支持库 iext
线程_进入许可区 (线程锁)
激活状态 = 账号信息 [序号].激活状态
线程_退出许可区 (线程锁)
.如果真 (激活状态 ≠ “账号信息错误”)
.如果真 (POST取激活链接 (序号) = 假)
POP取激活链接 (序号)
.如果真结束
线程_进入许可区 (线程锁)
激活链接 = 账号信息 [序号].激活链接
线程_退出许可区 (线程锁)
.如果真结束
.如果真 (激活链接 ≠ “”)
调试输出 (激活链接)
返回数据 = 到文本 (网页_访问 (激活链接))
线程_进入许可区 (线程锁)
.如果真 (寻找文本 (返回数据, “Thanks for verifying your account”, , 真) > 0)
账号信息 [序号].激活状态 = “账号激活成功”
.如果真结束
.如果真 (寻找文本 (返回数据, “There may already be a verified account associated with this email address”, , 真) > 0)
账号信息 [序号].激活状态 = “账号验证重复”
.如果真结束
.如果真 (账号信息 [序号].激活状态 = “链接获取成功”)
账号信息 [序号].激活状态 = “未知验证信息”
.如果真结束
线程_退出许可区 (线程锁)
.如果真结束
线程_进入许可区 (线程锁)
超级列表框1.置标题 (账号信息 [序号].当前序号 - 1, 3, 账号信息 [序号].激活状态)
.判断开始 (账号信息 [序号].激活状态 = “账号激活成功” 或 账号信息 [序号].激活状态 = “账号验证重复”)
激活成功文本号 = 打开文件 (编辑框_已激活.内容, , )
移到文件尾 (激活成功文本号)
.判断开始 (账号信息 [序号].激活状态 = “账号验证重复”)
写文本行 (激活成功文本号, 账号信息 [序号].邮箱账号 + “----” + 账号信息 [序号].邮箱密码 + “----” + 账号信息 [序号].激活状态)
.默认
写文本行 (激活成功文本号, 账号信息 [序号].邮箱账号 + “----” + 账号信息 [序号].邮箱密码)
.判断结束
关闭文件 (激活成功文本号)
.默认
激活失败文本号 = 打开文件 (编辑框_激活失败.内容, , )
移到文件尾 (激活失败文本号)
写文本行 (激活失败文本号, 账号信息 [序号].邮箱账号 + “----” + 账号信息 [序号].邮箱密码 + “----” + 账号信息 [序号].激活状态)
关闭文件 (激活失败文本号)
.判断结束
文本_删除指定文件行 (编辑框_已zc.内容, 账号信息 [序号].邮箱账号 + “----” + 账号信息 [序号].邮箱密码)
当前激活进度 = 当前激活进度 + 1
线程_退出许可区 (线程锁)
补充内容 (2019-4-20 09:33):
.版本 2
.支持库 RegEx
.子程序 POST取激活链接, 逻辑型
.参数 序号, 整数型
.局部变量 邮箱账号, 文本型
.局部变量 邮箱密码, 文本型
.局部变量 提交数据, 文本型
.局部变量 正则, 正则表达式类
.局部变量 正则1, 正则表达式
.局部变量 pwd, 文本型
.局部变量 返回信息, 文本型
.局部变量 提交cookies, 文本型
.局部变量 sid, 文本型
.局部变量 mCookies, 文本型
.局部变量 提交协议头, 文本型
.局部变量 i, 整数型
.局部变量 链接邮件, 文本型
.局部变量 邮件内容, 文本型
线程_进入许可区 (线程锁)
邮箱账号 = 账号信息 [序号].邮箱账号
邮箱密码 = 账号信息 [序号].邮箱密码
线程_退出许可区 (线程锁)
线程_初始化COM库 ()
pwd = 编码_运行JS代码 (#密码JS解密, “rsaPwd”, 邮箱密码)
线程_取消COM库 ()
提交数据 = “method=login&back_url=×tamp=0&m=1®ister=0&wml=false&srandid=&ucid=&publicExponent=10001&modulus=967094d470dc7940f32ab7e8b701cf2ca732c7cd7aed176ecd8cac605da26e5fc8664382bb2c0b73b8a0109016130ff0c0f73985fa990a18466008b14284969d58f2c2c2698f91b6dcc6bebd90663d288dca79586b8294a56619dd87ab21274088c318e26b6e3210b165118b87ebc8798df572b2b84cfa9fe54d04e3b8dc1b25&username=” + 文本_删右边 (邮箱账号, 8) + “&domain=163.com&password=” + pwd
返回信息 = 编码_Utf8到Ansi (网页_访问_对象 (“http://m.mail.163.com/login.s”, 1, 提交数据, 提交cookies, , #登录协议头, ))
.如果真 (寻找文本 (返回信息, “收件箱”, , 假) ≠ -1)
正则.创建 (#正则规则, 返回信息)
sid = 正则.取子匹配文本 (1, 1)
mCookies = 正则.取子匹配文本 (1, 2)
提交协议头 = 子文本替换 (#协议头, “http://m37.mm.mail.163.com/xm/welcome.do?mCookie=EAcAVgQGBAQfUyJSUx4aB1pbUQgEUlcdAAAAUVsABQhNVQJRBAEAUAcFB1IcUloBB0gNXVNXHApVW1JOVFMMAlI&passport=&keyfrom=auth.input&auth=1&user=q495214225%40163.com&wml=false×tamp=0®ister=0”, “http://m37.mm.mail.163.com/xm/welcome.do?mCookie=” + mCookies + “&passport=&keyfrom=auth.input&auth=1&user=” + 文本_删右边 (邮箱账号, 8) + “%40163.com&wml=false×tamp=0®ister=0”, , , 真)
返回信息 = 编码_Utf8到Ansi (网页_访问_对象 (“http://m37.mm.mail.163.com/xm/mailbox.do?sid=” + sid + “&mCookie=” + mCookies + “&wml=false&go=allMsgs&fid=1&keyfrom=allfolder”, , , 提交cookies, , 提交协议头, ))
正则.创建 (#收件列表正则, 返回信息)
链接邮件 = “”
.计次循环首 (正则.取匹配数量 (), i)
.如果真 (子文本替换 (正则.取子匹配文本 (i, 3), “[<span class=” + #引号 + “green” + #引号 + “>新</span>]”, “(新)”, , , 真) = “ Path of Exile ”)
链接邮件 = 正则.取子匹配文本 (i, 6)
.如果真结束
.如果真 (子文本替换 (正则.取子匹配文本 (i, 3), “[<span class=” + #引号 + “green” + #引号 + “>新</span>]”, “(新)”, , , 真) = “ (新) Path of Exile ”)
链接邮件 = 正则.取子匹配文本 (i, 6)
.如果真结束
延时 (100)
.计次循环尾 ()
.如果真 (链接邮件 = “”)
线程_进入许可区 (线程锁)
账号信息 [序号].激活状态 = “未找到激活邮件”
线程_退出许可区 (线程锁)
返回 (假)
.如果真结束
提交协议头 = 子文本替换 (#协议头, “http://m37.mm.mail.163.com/xm/welcome.do?mCookie=EAcAVgQGBAQfUyJSUx4aB1pbUQgEUlcdAAAAUVsABQhNVQJRBAEAUAcFB1IcUloBB0gNXVNXHApVW1JOVFMMAlI&passport=&keyfrom=auth.input&auth=1&user=q495214225%40163.com&wml=false×tamp=0®ister=0”, “http://m37.mm.mail.163.com/xm/mailbox.do?sid=” + sid + “&mCookie=” + mCookies + “&wml=false&go=allMsgs&fid=1&page=1&keyfrom=nav.top.read&isClear=1”, , , 真)
返回信息 = 编码_Utf8到Ansi (网页_访问_对象 (“http://m37.mm.mail.163.com/xm/message.do?sid=” + 子文本替换 (链接邮件, “amp;”, “”, , , 真), , , 提交cookies, , 提交协议头, ))
邮件内容 = 文本_取出中间文本 (返回信息, “<div class=” + #引号 + “mailcontent” + #引号 + “>”, “<div class=” + #引号 + “ctrlBgBar” + #引号 + “>”)
邮件内容 = 子文本替换 (邮件内容, “<br />”, #换行符, , , 真)
邮件内容 = 子文本替换 (邮件内容, “ ”, “ ”, , , 真)
邮件内容 = 子文本替换 (邮件内容, “ ”, “ ”, , , 真)
正则1.创建 (“<.*?>”, )
邮件内容 = 正则1.替换 (邮件内容, “”, 1, , 真, 真)
线程_进入许可区 (线程锁)
账号信息 [序号].激活链接 = 文本_取右边 (邮件内容, “following URL”)
.如果真 (账号信息 [序号].激活链接 ≠ “”)
账号信息 [序号].激活状态 = “链接获取成功”
线程_退出许可区 (线程锁)
返回 (真)
.如果真结束
账号信息 [序号].激活状态 = “未提取出激活链接”
线程_退出许可区 (线程锁)
返回 (假)
.如果真结束
线程_进入许可区 (线程锁)
账号信息 [序号].激活状态 = “邮箱登录失败!”
线程_退出许可区 (线程锁)
返回 (假)
补充内容 (2019-4-20 09:34):
.版本 2
.支持库 pop3
.支持库 spec
.子程序 POP取激活链接
.参数 序号, 整数型
.局部变量 邮箱账号, 文本型
.局部变量 邮箱密码, 文本型
.局部变量 连接状态, 逻辑型
.局部变量 错误信息, 文本型
.局部变量 获取邮件, 逻辑型
.局部变量 邮件数量, 整数型
.局部变量 邮件大小, 整数型
.局部变量 邮件内容, 文本型
.局部变量 i, 整数型
.局部变量 邮件信息, 邮件信息
.局部变量 当前邮件主题, 文本型
线程_进入许可区 (线程锁)
邮箱账号 = 账号信息 [序号].邮箱账号
邮箱密码 = 账号信息 [序号].邮箱密码
线程_退出许可区 (线程锁)
线程_进入许可区 (方法锁)
连接状态 = 连接收信服务器 (“pop.163.com”, 110, 邮箱账号, 邮箱密码, 5000, 1)
.判断开始 (连接状态 = 假)
错误信息 = 取邮件错误信息 ()
线程_进入许可区 (线程锁)
.判断开始 (寻找文本 (错误信息, “您没有权限使用pop3功能”, , 假) ≠ -1)
账号信息 [序号].激活状态 = “未找到激活邮件”
.默认
账号信息 [序号].激活状态 = “口令出错,拒绝访问”
.判断结束
线程_退出许可区 (线程锁)
调试输出 (错误信息)
.默认
获取邮件 = 获取邮件信息 (邮件数量, 邮件大小)
.如果真 (获取邮件)
.计次循环首 (邮件数量, i)
邮件信息 = 接收邮件 (i)
当前邮件主题 = 邮件信息.取主题 ()
.如果真 (当前邮件主题 = “Your account has been created”)
邮件内容 = 邮件信息.取文本内容 ()
线程_进入许可区 (线程锁)
账号信息 [序号].激活链接 = 子文本替换 (文本_取出中间文本 (邮件内容, “URL=0A=0A”, “=0A”), “=” + #换行符, “”, , , 真)
账号信息 [序号].激活状态 = “链接获取成功”
线程_退出许可区 (线程锁)
跳出循环 ()
.如果真结束
.如果真 (当前邮件主题 ≠ “Your account has been created” 且 当前邮件主题 ≠ “”)
删除邮件 (i)
.如果真结束
调试输出 (当前邮件主题)
.计次循环尾 ()
线程_进入许可区 (线程锁)
.如果真 (账号信息 [序号].激活链接 = “”)
账号信息 [序号].激活状态 = “未找到激活邮件”
.如果真结束
线程_退出许可区 (线程锁)
断开收信服务器 ()
线程_退出许可区 (方法锁)
返回 ()
.如果真结束
线程_进入许可区 (线程锁)
账号信息 [序号].激活状态 = “获取邮件失败!”
线程_退出许可区 (线程锁)
.判断结束
断开收信服务器 ()
线程_退出许可区 (方法锁)
|
最佳答案
查看完整内容
一个线程读取 变量
一个线程写入 变量
最好读写都加入线程许可
正常少量测试不出来的
但是会存在一种情况
a线程读取变量,B线程正在写入变量,这之间存在一个微小的间隙
会造成内存报错,我遇到过
而且正常读写内存变量,加个线程许可不影响代码效率,影响微乎其微,建议加上
回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。 友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。 快捷通道:申请荣誉值 →
|