TC官方合作论坛

标题: 为什么按两下启动热键会出问题 [打印本页]

作者: zxczxc1968531    时间: 2016-8-13 15:15
标题: 为什么按两下启动热键会出问题
按两下启动热键时,脚本就会一直开启无法关闭,结束键失效,这个是视频教程6部曲第5部里的一段代码
功能 执行()
    变量 x1=编辑框获取文本("编辑框0")
    变量 y1=编辑框获取文本("编辑框1")
    变量 x2=编辑框获取文本("编辑框3")
    变量 y2=编辑框获取文本("编辑框2")
    如果(x1==0||y1==0||x2==0||y2==0)
        消息框("不能为空!")
    否则
        
        循环(真)
            //第一个点
            鼠标移动(x1,y1)
            等待(1000)
            
            
            //第二个点
            鼠标移动(x2,y2)
            等待(1000)
        结束
    结束
结束
变量 线程ID,是否暂停=假
//启动_热键操作
功能 启动_热键()
    线程ID=线程开启("执行","")
结束
//终止热键操作
功能 终止_热键()
    线程关闭(线程ID)
结束


功能 暂停_热键()
    如果(是否暂停)
        是否暂停=假
        线程恢复(线程ID)
    否则
        是否暂停=真
        线程暂停(线程ID)
    结束
   
结束


作者: 言术    时间: 2016-8-13 15:52
因为关闭线程需要句柄,按两次热键会启动两个线程,得到两个句柄,而保存线程句柄的变量只有一个,所以后一个句柄会覆盖前一个。所以前一个线程句柄消失了,就没法关闭了。
作者: zxczxc1968531    时间: 2016-8-13 17:07
言术 发表于 2016-8-13 15:52
因为关闭线程需要句柄,按两次热键会启动两个线程,得到两个句柄,而保存线程句柄的变量只有一个,所以后一 ...

那这个问题怎么解决呢
作者: zxczxc1968531    时间: 2016-8-13 17:09
言术 发表于 2016-8-13 15:52
因为关闭线程需要句柄,按两次热键会启动两个线程,得到两个句柄,而保存线程句柄的变量只有一个,所以后一 ...

差不多应该明白了,执行一次之后,销毁热键行吧
作者: zxczxc1968531    时间: 2016-8-13 17:14
言术 发表于 2016-8-13 15:52
因为关闭线程需要句柄,按两次热键会启动两个线程,得到两个句柄,而保存线程句柄的变量只有一个,所以后一 ...

方法应该有好几个吧,判断线程是否被开启过,事件对象防多开
作者: 剑仙十号    时间: 2016-8-13 19:42


我一般这样写。稳当稳当的。


var 线程ID, 循环开关
功能 执行()
  循环开关 = 1
while(循环开关)
调试输出("111111")
sleep(100)
end
结束

功能 启动_热键()
  if(线程ID == "")
  线程ID = 线程开启("执行", "")
end
结束
功能 终止_热键()
  循环开关 = 0
  线程关闭(线程ID)
  线程ID = ""
结束
功能 ****_初始化()
  线程ID = ""
结束
作者: zxczxc1968531    时间: 2016-8-13 19:45
剑仙十号 发表于 2016-8-13 19:42
我一般这样写。稳当稳当的。

你这个我还没看等下看看,我把这句事件打开(线程ID)改成线程获取状态,现在一点问题没有了,怎么按都不会有问题了,不过还是感谢解答!

作者: zxczxc1968531    时间: 2016-8-13 19:51
zxczxc1968531 发表于 2016-8-13 19:45
你这个我还没看等下看看,我把这句事件打开(线程ID)改成线程获取状态,现在一点问题没有了,怎么按都不会 ...

你这个也是判断线程状态,根据状态做启动相应操作,道理是一样的,不过采纳不了你,没显示采纳两字
作者: 剑仙十号    时间: 2016-8-13 19:53
zxczxc1968531 发表于 2016-8-13 19:45
你这个我还没看等下看看,我把这句事件打开(线程ID)改成线程获取状态,现在一点问题没有了,怎么按都不会 ...

你这样写问题多多。

我曾经这样写,对同一个窗口,多个线程的脚本。
脚本一直无法停止。


作者: 剑仙十号    时间: 2016-8-13 19:54
只是一个线程的脚本,却可以停止。

tc获取线程状态,怪怪的。

作者: zxczxc1968531    时间: 2016-8-13 20:35
剑仙十号 发表于 2016-8-13 19:54
只是一个线程的脚本,却可以停止。

tc获取线程状态,怪怪的。

反正很多方法都可以实现同一种功能,我是初学对很多不太了解,等时间久点懂得多点了,实现功能的方法自然多些,现在很多东西只能看个大概意思,不能完全看明白




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1