今遇一萌系提问.脚本多开自动登录账号时.需要从列表框里取账号去登录. 但是多开时如果多个线程同时从列表框里取账号,取到同一个账号怎么办? 关于这个问题呢,萌新们不用担心.我们只需要使用一个命令即可搞定. 此命令就是多线程的 许可证 也有叫 临界区 的他两是同一个东西. 这个命令的作用就相当于排队功能,会让我们的线程排队进入某一个地方. 进入一个后,只有当这一个出来了.后面的才能进去.这样的话就不会出现取号错乱的情况了 具体我给萌新们写了一个取号子程序框架大家可以参考一下
具体操作我们看代码
图1: 此为界面图片.可以看到界面上我们放了一个超级列表框.报表列分别有ID 账号 密码 已取 一般大多数人都在这么设计的.当然后面这个已取实际上就是一个状态显示,叫什么自己随意
图2:在窗口创建完毕后我们申明一个程序集变量 取号许可证.
这个很重要,后面取号程序需要用这个变量来进入和退出许可区
图3:这是一个模拟登陆账号的子程序.一般都是从登陆账号里去调用取账号子程序对吧.当然这个地方可以随意发挥,我这里只是为了大家能直观的看出怎么调用的
图4:这里就是最重要取账号子程序了.
(1) 因为需要返回 账号 密码 两个参数.所以不能用 返回().如果用返回的话,我们还需要拼接账号密码,然后在分割,这样很麻烦.我们这里直接用参数,勾选参考.勾选了参考的意思就是这个两个值在子程序结束时传递回去.
(2) 可以看到在子程序头部有一个 进入许可区.当这一个代码被执行后,在未调用退出许可区命令时,其他线程执行到这就会一直等待,等待前面线程退出许可区后才能进入执行后面的代码.许可区一次只会进入一个.
(3)当我们取号前需要判断列表框第3列,也就是图1里的 已取 表项.当这里得值为空时,就表示这个账号未被使用.此时我们就把他取出来.取出来后给这个 已取 列置状态为 已取 这样下一个线程判断的时候就会知道这个账号已经用过了
(4) 当取号成功返回结束子程序之前,一定要调用退出许可区命令退出许可区.如果这里没调用那么整个脚本就会卡在这里,因为你这里没退出,其他线程就会一直排队等待进入导致卡住
取号框架大概就这样,看图照抄代码 去测试下吧.保证不会重复取到同一个号.
|