TC官方合作论坛

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

[已解决] 做2个子窗口都各有一个线程,同时开启。怎么才能不相互...

[复制链接]
跳转到指定楼层
楼主
发表于 2013-11-17 15:42:44 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上加入TC

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

x
本帖最后由 1525299008 于 2013-11-17 16:03 编辑

每个线程都是几个按键,而且第一个线程是123,那第2个线程就是456.代码很简单,我就不贴了。我现在做的效果是要么第一个线程运行,要么是第二线程运行,不同时的效果很明显。都是同时用热键启动的。如何构建思路?现在的效果做不到按键精灵那种同时进行的效果。我简单的看了下临界区的知识,好像不对路,因为我不是同时按下一个相同的键,谈不上抢不抢的问题吧
回复

使用道具 举报

22#
发表于 2013-11-20 02:20:27 | 只看该作者
1525299008 发表于 2013-11-19 20:42
代码很简单,问题怎么才能让2个线程里每个按键接近同步按下

空间 杀怪并加血
  1. 空间 杀怪
  2. 线程句柄1,线程句柄2,临界区句柄,hwnd



  3. 功能 初始化()
  4.     临界区句柄=线程.创建临界区()
  5. 功能结束




  6. 功能 打怪()
  7.     循环(真)
  8.         杀怪.按键(65)
  9.         杀怪.按键(66)
  10.         杀怪.按键(67)
  11.         杀怪.按键(68)
  12.         
  13.     循环结束
  14. 功能结束



  15. 功能 加血()  
  16.     循环(真)
  17.         杀怪.按键(49)
  18.         杀怪.按键(50)
  19.         杀怪.按键(51)
  20.         
  21.     循环结束
  22. 功能结束



  23. 功能 按键(键码)
  24.     线程.进入临界区(临界区句柄)
  25.     键盘.按键(键码,10)//这里频率如你定的10次
  26.     线程.离开临界区(临界区句柄)
  27. 功能结束




  28. 功能 热键0_热键()
  29.     hwnd=窗口.鼠标所在窗口句柄()
  30.     如果(hwnd==0)
  31.         辅助.消息框("请选择正确的窗口句柄!")
  32.         返回 假
  33.     如果结束
  34.     线程句柄1=线程.开启("杀怪.打怪","")
  35.     线程句柄2=线程.开启("杀怪.加血","")
  36. 功能结束


  37. 功能 热键1_热键()
  38.     线程.关闭(线程句柄1)
  39.     线程.关闭(线程句柄2)

  40. 功能结束



  41. 空间结束
复制代码



上图,我用记事本测试的

第一张图是频率我设置为 1 的图






第二张图是频率我设置为 10 的图




字母为打怪技能   数字为加血

你看看那个跑起来更符合你需要的,你就控制下频率就行了



本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

21#
 楼主| 发表于 2013-11-19 20:42:09 | 只看该作者
kaixindexifan 发表于 2013-11-19 20:12
把你代码直接贴出来

代码很简单,问题怎么才能让2个线程里每个按键接近同步按下

空间 杀怪并加血
//默认空间
线程句柄
线程句柄1
功能 杀怪()
    循环(真)
        键盘.按键(49,10)
        键盘.按键(65,10)
        键盘.按键(50,10)
        键盘.按键(66,10)
        键盘.按键(51,10)
        键盘.按键(67,10)
        键盘.按键(52,10)
        键盘.按键(68,10)
        键盘.按键(49,10)
        键盘.按键(65,10)
        键盘.按键(50,10)
        键盘.按键(66,10)
        键盘.按键(51,10)
        键盘.按键(67,10)
        键盘.按键(52,10)
        键盘.按键(68,10)
        键盘.按键(49,10)
        键盘.按键(65,10)
        键盘.按键(50,10)
        键盘.按键(66,10)
        键盘.按键(51,10)
        键盘.按键(67,10)
        键盘.按键(52,10)
        键盘.按键(68,10)      
    循环结束
功能结束
功能 加血()
    循环(真)
        键盘.按键(56,10)
        键盘.按键(57,10)
        键盘.按键(48,10)
        键盘.按键(56,10)
        键盘.按键(57,10)
        键盘.按键(48,10)
        键盘.按键(56,10)
        键盘.按键(57,10)
        键盘.按键(48,10)
        键盘.按键(56,10)
        键盘.按键(57,10)
        键盘.按键(48,10)        
    循环结束
功能结束
//开始按钮_点击操作
功能 开始_点击()
    线程句柄=线程.开启("杀怪并加血.杀怪","")
    线程句柄1=线程.开启("杀怪并加血.加血","")
功能结束

//退出按钮_点击操作
功能 退出_点击()
    线程.关闭(线程句柄)
    线程.关闭(线程句柄1)
   
功能结束

功能 热键0_热键()
    //这里添加你要执行的代码
    杀怪并加血.开始_点击()
      
功能结束

功能 热键1_热键()
    //这里添加你要执行的代码
    杀怪并加血.退出_点击()
功能结束

空间结束
//空间结束语句
回复 支持 反对

使用道具 举报

20#
发表于 2013-11-19 20:12:12 | 只看该作者
1525299008 发表于 2013-11-19 17:01
首先不是让2个线程里的2个循环,通过时间间隔分别进入临界区,来依次执行。
而是让2个线程里的2个循环, ...

把你代码直接贴出来
回复 支持 反对

使用道具 举报

19#
 楼主| 发表于 2013-11-19 17:01:09 | 只看该作者
kaixindexifan 发表于 2013-11-19 12:45
先运行谁,后运行谁,是你编写代码说了算,看你怎么编写;线程开启后,就在运行了,两个线程两个循环同时 ...

首先不是让2个线程里的2个循环,通过时间间隔分别进入临界区,来依次执行。
而是让2个线程里的2个循环,同时执行。关键点在于让每个循环里的每个按键,尽量同时按下(理论上是不可能的),只是我们肉眼看不出来而已。(按键精灵里的效果是,我建个打怪F1启动,F2停止。在建个加血F3启动,F4停止。当都启动时,在打怪的同时,也在同时加血)
而现在我用TC能做的代码效果是,按下热键后,让2个线程同时启动,要么是第一个线程里的循环在运行,要么是第二个线程在运行。
比如我的第一个线程循环里是按下A,50次。按下B,50次,在按下1键,50次。
第二个线程循环里是按下8,2次,按下9,2次,按下0,3次。关键点是在打怪的同时,还不停的加血.
回复 支持 反对

使用道具 举报

18#
发表于 2013-11-19 12:48:36 | 只看该作者
1525299008 发表于 2013-11-19 12:24
原理我是知道的,我是想说,把一个循环作为一个单位,这个我到可以理解,也知道做好后,软件是怎么运行的 ...

你直接说 你需要实现怎么样的按键  说清楚点 我看看能不能帮你写出来

回复 支持 反对

使用道具 举报

17#
发表于 2013-11-19 12:45:19 | 只看该作者
1525299008 发表于 2013-11-19 12:24
原理我是知道的,我是想说,把一个循环作为一个单位,这个我到可以理解,也知道做好后,软件是怎么运行的 ...

先运行谁,后运行谁,是你编写代码说了算,看你怎么编写;线程开启后,就在运行了,两个线程两个循环同时在运行,至于你说的什么先运行线程1再跑线程2那是不对的,我说的很清楚了,假如你现在只有一个临界区,那么线程1和线程2都需要使用这个共同的临界区的时候,当需要进入临界区的时候,他们就会依次排队等待。

你可以测试

比如线程1 你把循环频率调到 没10秒执行一次循环

线程2 你把循环调到没2秒执行一次循环

你试下 就清楚了

如果用键盘按键在游戏里面不容易分别

你就弄两个记事本

分别向里面写东西



回复 支持 反对

使用道具 举报

16#
 楼主| 发表于 2013-11-19 12:24:08 | 只看该作者
kaixindexifan 发表于 2013-11-19 11:48
临界区是这样一种意思,它好比一个空着的电话亭,当你有代码需要进入的临界区的时候,他会先判断电话亭里 ...

原理我是知道的,我是想说,把一个循环作为一个单位,这个我到可以理解,也知道做好后,软件是怎么运行的。先是运行第一个线程里的循环,当第一个线程循环结束后,在进行第2个线程的循环。可是我要的是2个循环里每个按键,要类似同步。
我把循环里的每个按键,都加了临界区后,我想知道,他到底怎么运行呀。是先运行按键1,然后跑到第2个线程里的循环里执行按键8,然后又蹦回到第一个线程里的循环里执行下一个按键吗?能明白我的想法吗?呵呵
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2013-11-19 12:23:45 | 只看该作者
kaixindexifan 发表于 2013-11-19 11:48
临界区是这样一种意思,它好比一个空着的电话亭,当你有代码需要进入的临界区的时候,他会先判断电话亭里 ...

原理我是知道的,我是想说,把一个循环作为一个单位,这个我到可以理解,也知道做好后,软件是怎么运行的。先是运行第一个线程里的循环,当第一个线程循环结束后,在进行第2个线程的循环。可是我要的是2个循环里每个按键,要类似同步。
我把循环里的每个按键,都加了临界区后,我想知道,他到底怎么运行呀。是先运行按键1,然后跑到第2个线程里的循环里执行按键8,然后又蹦回到第一个线程里的循环里执行下一个按键吗?能明白我的想法吗?呵呵
回复 支持 反对

使用道具 举报

14#
发表于 2013-11-19 11:48:10 | 只看该作者
1525299008 发表于 2013-11-19 09:36
思考了半天,当我明白临界区的原理时,我到不会写代码了。什么时候1键进去,什么时候8键进去,怎么个写法 ...

临界区是这样一种意思,它好比一个空着的电话亭,当你有代码需要进入的临界区的时候,他会先判断电话亭里面是否已经有人(就好比看是否有代码已经进入临界区),如果没人,就进去打电话,然后按照你设计的代码,在正确的时候离开电话亭(离开临界区);当判断电话亭里面有人在打电话的时候,他会在外面等待,(你的程序就会停止在进入临界区那里)一直到里面的人出来后,他才会进入临界区。所以我说了,有时候根据需要,你可以多建设几个电话亭(临界区),让你的代码运行更加流畅。

至于你的第二个问题,希望你参考tc官方手册,你打开tc编程软件,右上角有个问号,你点击就会弹出手册的,看来你是从按键过来的,你没事先多看看tc手册,你把基础学会了后,你会发现tc比按键简单好用多了

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

关闭

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

GMT+8, 2025-10-1 06:56 , Processed in 0.149111 second(s), 25 queries .

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

© 2001-2013 Comsenz Inc.

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