TC官方合作论坛

 找回密码
 立即注册
查看: 329|回复: 5
打印 上一主题 下一主题

[已解决] 求助,关于多线程的问题

[复制链接]
跳转到指定楼层
楼主
发表于 2015-3-31 11:12:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
写了个脚本,运行时发现个问题,脚本如下:

功能  AA


   线程1状态=线程.获取线程状态(线程句柄1)
   
    如果(线程1状态)
        线程.关闭(线程句柄1)  
    如果结束

     dm.KeyPress(13)

    辅助.等待(300)

    输入退出指令=dm.SendString(hwnd,"/exit")

    辅助.等待(300)

   dm.KeyPress(13)

功能结束

调用的大漠,代码很简单,这个功能是线程2,线程2的功能是先判断线程1是否开启,如果开启了就关闭它,然后敲回车,敲完回车会在游戏里出现个对话框,可以输入字符的,然后程序发送exit指令到对话框,再敲回车,就退出游戏了,很简单,大神一看就懂,我碰到的问题是实际执行中,他敲完回车后出现对话框后不会输入/EXIT指令,而是不停输入"S“字符,为什么会这样,我分析是因为线程1里面有个循环,会不定时的输出"s"字符,这样2个线程同时运行就会这样,但是我明明是在敲回车前已经关闭线程1了的啊,为什么还会出现这种现象呢,是否如果线程中有循环语句,即使你关闭了线程,循环语句还会运行一段时间呢?
回复

使用道具 举报

5#
发表于 2015-3-31 15:11:19 | 只看该作者
说说我想到的可能吧,线程.关闭(线程句柄1)---这个函数是否执行成功?,或者线程还没关闭就已经执行到下面的语句了。你可以在这个函数加个循环,确定线程已经关闭了,再往下执行。。。。。仅供参考。
回复 支持 反对

使用道具 举报

沙发
发表于 2015-3-31 11:44:22 | 只看该作者
用单独按键 执行一个 dm.SendString看能否发送成功
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2015-3-31 12:36:02 | 只看该作者
kevinqq 发表于 2015-3-31 11:44
用单独按键 执行一个 dm.SendString看能否发送成功

可以的,忘了说我出现这个情况不是总是出现的,有时会出现,大部分情况程序还是能正常执行下去退出游戏的,但是有时就不会退出,会卡住,对话框出来很多S字符,我想问下,正常情况下如果我在某一时刻执行了关闭线程操作,是否从这一时刻起线程里面的程序肯定就不再运行呢,会不会有延时运行一段时间的情况,比如线程中正在执行个循环遍历什么的。
回复 支持 反对

使用道具 举报

地板
发表于 2015-3-31 12:41:13 | 只看该作者
在线程1里加个调试输出,看看启动线程2后有没有停止
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2015-4-1 00:55:22 | 只看该作者
言术 发表于 2015-3-31 15:11
说说我想到的可能吧,线程.关闭(线程句柄1)---这个函数是否执行成功?,或者线程还没关闭就已经执行到下面 ...

这个想法不错,我打算试下,调试程序真的需要耐心,尤其那些偶发性的问题,他不是每次必出的,时不时出现一次这个,有时你调试半天他不出,编译EXE文件运行一段时间后问题就来了。。。
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18043773号

GMT+8, 2025-9-23 13:29 , Processed in 0.138217 second(s), 23 queries .

Powered by 海安天坑软件科技有限公司

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表